iOS

[iOS] 2025.03.20 과제 트러블 슈팅

ioskkt 2025. 3. 20. 20:46
class BaseballGame {
    func start() {
        print("환영합니다! 원하시는 번호를 입력해주세요.")
        print("1. 게임 시작하기, 2. 게임 기록 보기, 3. 종료하기")
        if let userNum = readLine(), let numChoice = Int(userNum) {
            switch numChoice {
            case 1:
                start1()
//            case 2:
//                record()
//            case 3:
//                logOut()
            default:
                start()
            }
        }
    }
    
    func start1() {
//        print("""
//<게임을 시작합니다>
//숫자를 입력하세요
//""")                            // 두줄로 작성하는법 찾음.
        print("<게임을 시작합니다>")
        print("숫자를 입력하세요")     // 두줄로 작성하는 방법 찾아보기
                
        let answer = makeAnswer() // 정답 만들기

        while true {
            let userInput = userInput() // 유저값 계속 입력하기
            
            if userInput.contains(where: { $0 < 1 || $0 > 9 }) { // 0~9 까지 숫자인지 확인, AND가 아니라 OR 임
                print("0~9 까지 입력 가능해요!") // 마이너스를 입력해도, 두자리를 입력해도 반응X
                continue
            }
            
            if userInput.count != 3 { // 숫자 3개 아닌지 확인, 참이면(3개가 아니면) 계속 반복, 거짓이면(3이면) 다음단계
                print("3자리를 입력하세요!")
                continue
            }
            
            if Set(userInput).count != 3 { // set으로 변경시키면 중복이 사라지므로 중복이 있는 경우 갯수가 줄어듦.
                print("중복은 안돼요!")
                continue
            }
            
            var strikeCount = 0
            var ballCount = 0
            
            for (index, value) in userInput.enumerated() { // 값과 인덱스를 튜플형식으로 바꿔줌
                if answer[index] == value {
                    strikeCount += 1
                } else if answer.contains(value) {
                    ballCount += 1
                }
            }
            print("Strike: \(strikeCount)")
            print("ball: \(ballCount)")
                        
            if strikeCount == 3 {
                print("OUT!")
                break
            }
        }
    }
        
    func makeAnswer() -> [Int] {
        var numbers: [Int]
        
        repeat {
            numbers = Array(0...9).shuffled().prefix(3).map { $0 }
        } while numbers.first == 0
        
        return numbers
    }

    func userInput() -> [Int] {
        if let input = readLine() { // if let 옵셔널 바인딩 사용, readLine()의 반환타입이 String? 이기 때문
            return input.split(separator: " ").compactMap { Int($0) }
        }
            return []
        }
    
//    func record() {
//        print("<게임 기록 보기>")
//        
//        let recordManager
//    }
//    
//    func recordManager() {
//        
//    }
    
    }

 

트러블 슈팅 TIL

 

문제 상황

  • 발생일시 : 2025.03.20
  • 발생환경 : Command Line Tool, Swift 5, macOS 사용
  • 기능 : contains 로 배열 안의 숫자가 조건에 맞는지 확인
  • 문제 내용 : 작동불가

 

원인 분석

  • 조건  :  값 < 0 && 값 >9

 

해결과정

  • 조건 자체가 AND가 아니라 OR이 들어가야 만족한다는 것을 발견함.(튜터님 조언)
 // 기존 코드
 if userInput.contains(where: { $0 < 1 && $0 > 9 }) { // 0~9 까지 숫자인지 확인
                print("0~9 까지 입력 가능해요!") // 마이너스를 입력해도, 두자리를 입력해도 반응X
                continue
            }
 // 수정된 코드
 if userInput.contains(where: { $0 < 1 || $0 > 9 }) { //AND가 아니라 OR 임
                print("0~9 까지 입력 가능해요!") // 
                continue
            }

 

결과

  • 해당 조건을 충족했을 때, 값이 출력됨.

 

향후 개선 사항

  • 클린코드 작성

'iOS' 카테고리의 다른 글

[iOS] 2025.04.13 오늘의 꿀팁  (0) 2025.04.13
[iOS] 2025.03.24 클래스와 구조체  (0) 2025.03.24
[iOS] 2025.03.05 팀프로젝트(3)  (0) 2025.03.05
[iOS] 2025.03.04 팀프로젝트(2)  (0) 2025.03.04
[iOS] 2025.03.03 팀프로젝트(1)  (1) 2025.03.03