【发布时间】:2016-03-15 23:03:36
【问题描述】:
Apple 文档对隐式展开可选选项进行了以下说明。
注意
如果一个隐式展开的可选项是 nil 并且您尝试访问它 包装的值,您将触发运行时错误。结果正好 就好像你在一个普通的可选项后面加上一个感叹号一样 不包含值。
到目前为止,一切都很好。但是,如果我们看到任何 UI 属性的引用都是隐式展开的可选。我一直在这样做 -
@IBOutlet weak var lbleemsx: UILabel!
@IBOutlet weak var nmtxtfld: UITextField!
override func viewDidLoad()
{
super.viewDidLoad()
lbleemsx.text = nmtxtfld!.text
}
现在,如果用户没有在文本字段中输入任何内容,nmtxtfld!.text 的值为 nil,并且由于我在代码中使用它的值,所以它应该返回错误,但它没有。为什么会这样?
【问题讨论】:
-
如果没有输入,
text的值将是"",这在技术上不是nil。它只是一个空字符串。 -
@Arc676 所以我没有使用任何类型的代码来这样做或者是默认情况下。
-
(理论上,我真的不做iOS)如果你尝试获取一个空文本视图的内容,你会得到一个空字符串。这不会使它成为
nil。我不确定这是否会在 Swift 中发生变化。 -
有时在swift中的弱变量会突然释放内存,所以在这个地方使用Strong或检查nil条件来赋值
-
@Anbu.Karthik 好的,但我的问题是根据文档,如果您在代码中使用隐式解包变量的值,并且如果它有 nill 或没有值,那么它应该会导致错误,但是当我的文本字段的文本为空或我的文本字段没有文本时,为什么不会发生这种情况。那为什么我的应用程序不会崩溃?
标签: ios swift uitextfield