警卫让我们找到零
guard let found nil
我是 guard let 模式的新手。当 selectedRooms.text
是 nil
而不是执行 return 部分时,我的应用程序为什么会崩溃?当我知道 numberOfRooms
不是 nil
时,为什么 rooms
是可选类型?
guard let numberOfRooms = selectedRooms.text else {
return selectedRooms.placeholder = "type something"
}
let rooms = Int(numberOfRooms)
x = Int(ceil(sqrt(Double(rooms!)))) //found nil value
selectedRooms.text
不能 return nil
.
一个UITextField
和UITextView
总是return一个String
值。如果 UITextField and UITextView
中没有文本,则会 return 编辑空的 String
(""
)。这就是 else
部分未执行且 rooms
值为 nil
.
的原因
现在,在下面的语句中你是 force-unwrapping(!
) rooms
.
x = Int(ceil(sqrt(Double(rooms!))))
但是,由于 rooms
是 nil
,因此强行解包会抛出 运行时异常。
解法:
您还需要为 else
部分添加一个空检查才能生效,即
guard let numberOfRooms = selectedRooms.text, !numberOfRooms.isEmpty else { //here...
return selectedRooms.placeholder = "type something"
}
guard let numberOfRooms = selectedRooms.text?.trimmingCharacters(in: .whitespacesAndNewlines), !numberOfRooms.isEmpty else {
return selectedRooms.placeholder = "type something"
}
if let rooms = Int(numberOfRooms) {
x = Int(ceil(sqrt(rooms)))
}
您不想强制展开 numberOfRooms 的值,您可以通过检查 if let
来使用
我是 guard let 模式的新手。当 selectedRooms.text
是 nil
而不是执行 return 部分时,我的应用程序为什么会崩溃?当我知道 numberOfRooms
不是 nil
时,为什么 rooms
是可选类型?
guard let numberOfRooms = selectedRooms.text else {
return selectedRooms.placeholder = "type something"
}
let rooms = Int(numberOfRooms)
x = Int(ceil(sqrt(Double(rooms!)))) //found nil value
selectedRooms.text
不能 return nil
.
一个UITextField
和UITextView
总是return一个String
值。如果 UITextField and UITextView
中没有文本,则会 return 编辑空的 String
(""
)。这就是 else
部分未执行且 rooms
值为 nil
.
现在,在下面的语句中你是 force-unwrapping(!
) rooms
.
x = Int(ceil(sqrt(Double(rooms!))))
但是,由于 rooms
是 nil
,因此强行解包会抛出 运行时异常。
解法:
您还需要为 else
部分添加一个空检查才能生效,即
guard let numberOfRooms = selectedRooms.text, !numberOfRooms.isEmpty else { //here...
return selectedRooms.placeholder = "type something"
}
guard let numberOfRooms = selectedRooms.text?.trimmingCharacters(in: .whitespacesAndNewlines), !numberOfRooms.isEmpty else {
return selectedRooms.placeholder = "type something"
}
if let rooms = Int(numberOfRooms) {
x = Int(ceil(sqrt(rooms)))
}
您不想强制展开 numberOfRooms 的值,您可以通过检查 if let
来使用