我糊涂了。有人能告诉我为什么当我有这个代码时我会收到“调用初始化程序时没有完全匹配”错误....
let bill = textField.text
let billTotal = Double(bill)
Run Code Online (Sandbox Code Playgroud)
但是当我强制展开 textField.text 时,错误消失了,一切都很好......
let bill = textField.text!
let billTotal = Double(bill)
Run Code Online (Sandbox Code Playgroud)
我的想法是它应该仍然可以在不强制展开的情况下工作,但是如果 textField 为 nil,应用程序将崩溃。
另外,为什么我不能使用可选而不是强制展开?
let bill = textField.text?
let billTotal = Double(bill)
Run Code Online (Sandbox Code Playgroud)
使用可选给我同样的错误:“调用初始化程序时没有完全匹配”
vad*_*ian 10
发生错误是因为text它是可选的,并且初始化参数必须是非可选的。
我的想法是它应该仍然可以在不强制展开的情况下工作,但是如果 textField 为 nil,应用程序将崩溃。
在这种情况下,强制解包很好,因为 a 的text属性UITextField从不,nil尽管它被声明为可选。
但是,您应该检查 createdDouble因为输入的文本可能无法转换为Double,或者使用默认值
let billTotal = Double(textField.text!) ?? 0.0
Run Code Online (Sandbox Code Playgroud)
或提供更高级的错误处理
if let billTotal = Double(textField.text!) {
// do something with billTotal
} else {
// handle the error
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26113 次 |
| 最近记录: |