이것은 필자가 작성한 첫 번째 실제 응용 프로그램이며 선택 사항을 언 래핑하는 동안이 "nil"오류가 발생하는 이유를 알지 못합니다.선택적 값의 래핑 중 "치명적인 오류 nil"디버깅하는 방법?
코드를 게시하기 전에 간단한 지출 계산기를 생각해보십시오.
두 개의 텍스트 필드 (expenseLabel 및 guestLabel)가 있습니다. 응용 프로그램의 시작 부분에 모두 비어 있어야합니다. 여기에 첫 번째 문제가 있습니다. 사용자가 실수로 계산 버튼을 누르면 나는 다음과 같은 오류가 발생합니다 :
unexpectedly found nil while unwrapping an Optional value
은 (그것은 내가 ** ... ** 내에서 아래로 아래에 표시된 코드의 첫 번째 라인이다).
사용자가 숫자를 입력하거나 앱 시작시 라벨이 비어 있지 않은 경우 (예 : 스토리 보드에 숫자를 입력하는 경우) 이는 발생하지 않지만 일부 이상한 이유로 인해 동일한 nil을 얻습니다. resultLabel.text를 업데이트 할 때 두 번째 줄부터 마지막 줄까지 (** ** ** 안에 다시 표시) 오류가 발생합니다. 엑스 코드 마크 다음과 같은 추가 정보와이 라인 :
Thread 1: EXC_BAD_INSTRUCTION (code=EXE_I386_INVOP, subcode=0x0)
이 여기에 코드입니다 :
class ViewController: UIViewController {
@IBOutlet weak var expenseLabel: UITextField!
@IBOutlet weak var guestLabel: UITextField!
@IBOutlet weak var resultLabel: UILabel!
@IBAction func splitButton(_ sender: Any) {
let expense = expenseLabel.text
let guests = guestLabel.text
**var result = Double(expense!)!/Double(guests!)!**
result = round(result * 100)/100
**resultLabel.text = String(result)**
self.view.endEditing(true)
}
...
그것은 많은 코드가 실제로 아니지만, 나는이 오류가 왜 이해가 안 돼요. 난 다음 시도하고 다른 모든 전에 두 변수의 비용과 손님을 소개 :
expense = Double(expenseLabel.text!) ?? 0.0
guests = Double(guestLabel.text!) ?? 0.0
나는이 오류를 언 래핑 전무를 제거하는 데 도움 것이라고 생각하지만,이 역시 작동하지 않았다.
지금은별로 쓸모가 없습니다. 왜냐하면 다시 이것은 많은 코드가 아니며 어떤 이유로 든 전혀 작동하지 않는 것으로 보입니다.
내 조언은 당신이 언어에 익숙해있어 때까지 (일명 '를 사용!'변수 이름 후) 기 해제를 강요하지 마십시오하는 것입니다. 강제로 값을 랩핑하는 것은 당신이 무언가를 해킹하고 올바르게하지 못하는 매우 명백한 신호입니다. 값을 추출하기 위해'if let' 또는'guard'를 사용하십시오. – AdamPro13