所以我试图做
let foo = dict["key"] as? String ?? "empty" var bar = some_func(string: foo!)
和XCode 6抱怨“后缀的操作数’!应该有可选类型;类型是’String’“在第二行。
如果我将第一行更改为
let foo: String? = dict["key"] as? String ?? "empty"
错误消失。
这是一种缺点还是我只是做错了什么?
无聚结算符a? b是一个捷径
a != nil ? a! : b
它返回左操作数展开或右操作数。所以foo的类型是String,第二行应该是
var bar = some_func(string: foo)
没有感叹号,因为foo不是可选的,不能被解开。
(如果将第一行更改为
let foo: String? = dict["key"] as? String ?? "empty"
那么右边的结果再次被包装到可选字符串中,并且需要以在第二行中打开。它使错误消失,但这可能不是你想要的。)