나는 디버깅을 이해하려고 애쓰며 새로운 도전을하고 있습니다. 이 문제에 대한 해결책을 묻고 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.”
그래서, 나는 전무 값을 사용하여 응용 프로그램을 중단 할 것을 이해 읽습니다. 나는 또한 내가 여기선 선택자들과 함께 일하고 있다는 것을 이해한다. 나는 다음에해야 할 일에 붙어있다.
당신은 스위프트의 '!'연산자를 사용해서는 안됩니다 도움이 될 것입니다. 값을 랩핑 할 수없는 경우에는 'guard let'또는 'let let'을 사용하고 오류 출력을 추가하십시오. 이렇게하면 오류를 찾을 수 있습니다. – dasdom
@dasdom * 절대! 스위프트 *의 연산자가 너무 흑백입니다. 강제적 인 언 래핑이 절대적으로 안전하고 설계 오류를 드러내는 회색 * 수준 (사례)이 많이 있습니다. 하지만 당신은이 ** 특별한 경우에 맞습니다. – vadian
@ vadian 제 의견으로는 처음부터 Swift에 추가되어서는 안됩니다. 그러나 ObjC 때문에 추가해야했습니다. – dasdom