Swift3移除Optional类型的比较操作
Swift 3
已经移除了Optional
类型的比较操作,这在Swift evolution SE-0121: Remove Optional Comparison Operators这条中明确了这一点。
在Swift 3
之前,标准库定义了4个操作符以支持Optional
类型,如下图所示。
不过Swift 3
中,由于泛型不支持条件一致性判断,即没有通用的方法来定义在比较nil和非nil值时,应该得到怎样的值,所以实际结果可能不是预期的。所以,在Swift 3
中,如果去比较两个Optional
值,会给出编译错误,如下代码所示。而这一比较在Swift 3之前是没有问题的。
let dic1 = [
"first": "123",
"last": "234"
]
let dic2 = [
"first": "123",
"last": "968"
]
dic1["middle"] < dic2["middle"] // value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?
当然在SE-0121中也说了,等泛型更加成熟后,不排除会将这一特性再添加回来。