ios - swift 中调用初始化程序错误消息时没有完全匹配
问题描述
我很困惑。有人可以告诉我为什么当我有此代码时出现“调用初始化程序时没有完全匹配”错误....
let bill = textField.text
let billTotal = Double(bill)
但是当我强制展开 textField.text 时,错误消失了,一切都很好......
let bill = textField.text!
let billTotal = Double(bill)
我的想法是它应该仍然可以在没有强制展开的情况下工作,但是如果 textField 为 nil,应用程序将会崩溃。
另外,为什么我不能使用可选而不是强制展开?
let bill = textField.text?
let billTotal = Double(bill)
使用可选项会给我同样的错误:“调用初始化程序时没有完全匹配”
解决方案
发生错误是因为text
是可选的,并且初始化程序参数必须是非可选的。
我的想法是它应该仍然可以在没有强制展开的情况下工作,但是如果 textField 为 nil,应用程序将会崩溃。
在这种情况下,强制展开很好,因为text
a 的属性UITextField
永远不会nil
,尽管它被声明为可选。
但是您应该检查 createdDouble
因为输入的文本可能无法转换为Double
,或者使用默认值
let billTotal = Double(textField.text!) ?? 0.0
或提供更高级的错误处理
if let billTotal = Double(textField.text!) {
// do something with billTotal
} else {
// handle the error
}
推荐阅读
- html - Outlook 不会在我的 HTML 电子邮件模板中加载我的 CSS 样式
- bash - 为什么我的 for 循环只将所有需要的项目存储为一个元素?
- python - 有没有办法将参数传递给 optuna 中的多个工作?
- java - Android Studio 中的 Gradle 构建同步失败
- react-native - 如何在本机反应中更改数组元素的样式
- javascript - Gatsby 构建后未将 className 添加到 html 元素
- javascript - 在 React.js 中将箭头函数转换为类
- python - 如何检测 Python 类中列表的变化,或者为什么“setter”没有触发
- css - Firefox 无法正确渲染 lavarel/bootstrap 的大小
- openid-connect - oidc-client 和 Azure AD B2C:错误请求