2017-11-28 4 views
-4

나는 디버깅을 이해하려고 애쓰며 새로운 도전을하고 있습니다. 이 문제에 대한 해결책을 묻고 StackOverflow 내에서 찾지 못했습니다. 나는 여기서 무슨 일이 일어나고 있는지, 그리고 왜이 충돌이 일어 났는지 더 잘 이해하려고 노력하고 있습니다.Swift에서 선택적 충돌을 풀기

나는 내 소스 코드의 print 문을 통해 버그를 추적했다. 이 함수의 시작 부분에 print 문을 추가하여 블록에 도달했는지 확인합니다.

@IBAction func bugTypeSelected(_ sender: UIButton) { 
    print("bugTypeSelected reached") 
    bugFactory.currentBugType = BugFactory.BugType(rawValue: Int(sender.currentTitle!)!)! 
    self.dismiss(animated: true, completion: nil) 
} 

내가 응용 프로그램을 실행하고 모달 설정의 버그 중 하나를 클릭

는 인쇄 문은 다음 응용 프로그램이 충돌을 콘솔에 인쇄됩니다. 엑스 코드는 문제가이 라인 내에있는 내게 말하고있다 :

bugFactory.currentBugType = BugFactory.BugType(rawValue: Int(sender.currentTitle!)!)! 

오류가

“Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value.”

그래서, 나는 전무 값을 사용하여 응용 프로그램을 중단 할 것을 이해 읽습니다. 나는 또한 내가 여기선 선택자들과 함께 일하고 있다는 것을 이해한다. 나는 다음에해야 할 일에 붙어있다.

+2

당신은 스위프트의 '!'연산자를 사용해서는 안됩니다 도움이 될 것입니다. 값을 랩핑 할 수없는 경우에는 'guard let'또는 'let let'을 사용하고 오류 출력을 추가하십시오. 이렇게하면 오류를 찾을 수 있습니다. – dasdom

+1

@dasdom * 절대! 스위프트 *의 연산자가 너무 흑백입니다. 강제적 인 언 래핑이 절대적으로 안전하고 설계 오류를 드러내는 회색 * 수준 (사례)이 많이 있습니다. 하지만 당신은이 ** 특별한 경우에 맞습니다. – vadian

+0

@ vadian 제 의견으로는 처음부터 Swift에 추가되어서는 안됩니다. 그러나 ObjC 때문에 추가해야했습니다. – dasdom

답변

0

그 라인의 문제는 계급에 강제 nil 값 여부 데이터 유형이 응용 프로그램은

아래와 같이 unwarp 사용 옵션 unwarp에 힘의 대신

충돌을 의미하는 경우가 unwarp 값에 힘입니다입니다

if sender.currentTitle != nil { 
    if let requiredIntValue = Int(sender.currentTitle!){ 
    if let bugType = BugFactory.BugType(rawValue: requiredIntValue)?{ 
     bugFactory.currentBugType = bugType 
    } 
    } 
} 

희망이 당신이

+0

감사합니다. 선택 사항을 풀고있는 곳을 보지만 처음 두 줄은 이해할 수 없습니다. 또한 두 번째 줄과 세 번째 줄에 오류가 발생합니다. 두 줄의 오류는 같습니다. 해결되지 않은 식별자 'requiredIntValue'사용 나는 무엇이 누락 되었습니까? –

+0

대답 업데이트 한 번 확인 –

+0

그게 효과가있어, 고마워. 나는 여기서 선택적인 연결의 사용을 이해하지 못한다. –

관련 문제