一尘不染

为什么UITextField.text是可选的?

swift

它以空字符串开头,而不是nil。即使将其显式设置为nil,它仍然是一个空字符串。我不明白 也许通过分配nil使其易于清除?用它编写代码很麻烦。

var textField = UITextField()
print(textField.text) // prints "Optional("")"
textField.text = nil
print(textField.text) // prints "Optional("")"

阅读 264

收藏
2020-07-07

共1个答案

一尘不染

这是历史性的事情。UITextField空字符串和nil字符串之间没有任何区别。在Objective-
C中,无需在两者之间进行区别,因为您可以nil在Objective-C中调用方法。

同样,在Objective-C中也无法阻止用户分配nil给属性。生成的合同text可以是可选的。在Objective-C中,这没有什么区别。

在Swift中,我们无能为力,因为UITextField.text必须更改合同,可能会破坏许多已经编写的代码。请注意,即使nil从未从该方法返回nil任何值,您仍然可以分配以重置该值。

您可以在旧的API中找到数百种类似的情况。

2020-07-07