它开始时是一个空字符串,而不是nil.即使显式设置为nil,它仍然是一个空字符串.我不明白.也许是为了更容易地通过指定零来清除?用它编写代码很笨拙.

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

推荐答案

这是一个历史事件.UITextField对空字符串和nil字符串没有任何区别.在Objective-C中,没有必要对它们进行区分,因为您可以在Objective-C中调用nil上的方法.

此外,Objective-C中也没有办法阻止用户将nil分配给一个属性.

在Swift中,我们无能为力,因为UITextField.text个合同将不得不更改,可能会 destruct 许多已经编写的代码.请注意,即使从未从该方法返回nil,您仍然可以指定nil来重置该值.

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

Swift相关问答推荐

Swift:iVar + Equatable上的协议约束

在`NavigationStack`中使用`SafeAreaInset`修饰符时出现SwiftUI异常行为

通常从数组调用的SWIFT静态协议函数

是否可以将具有关联值的枚举强制转换为其类型与关联值匹配的变量?

仅当单击UIButton时才调用计时器函数

SwiftUI,如何更改具有多个按钮和一个布尔条件的一个按钮标签

UIView.convert(_ point:to:)的意外行为

如何制作一个在 SceneKit 中投射阴影的透明物体?

如何在 SwiftUI 中创建条件内容?

memcpy 复制带偏移量的数组

ConfirmationDialog取消swiftui中的错误

try 制作一个 Swift 扩展来替换字符串中的多次出现

如何根据 SwiftUI 中的字体大小定义按钮的大小?

Swift:withCheckedContinuation 和 Dispatch QoSClass

如何仅将 SwiftUI 不透明度应用于父视图?

如何自己快速编写 Hashable 协议

无法使用锚激活约束

Swift 中的 PageViewController 当前页面索引

swift 中的@property/@synthesize 类似功能

如何在 SwiftUI 中的一个视图上显示两个alert ?