Swift中的存在运算符是什么?

时间:2014-06-23 02:15:43

标签: ios swift xcode6

在Objective C中,这是一行有效的代码

self.scrollView.contentSize = self.image ? self.image.size : CGSizeZero;

检查self.image是否为nil,并选择左侧或右侧值。 在Swift中,我想重新创建相同的代码行。实际上它应该完全相同,除非没有分号

self.scrollView.contentSize = self.image ? self.image.size : CGSizeZero

但是这在我的Swift代码中出现错误是无效的,'UIImage不符合协议LogicValue'

什么是正确的Swift代码?

2 个答案:

答案 0 :(得分:5)

如果self.image是Optional,则此代码有效。没有理由不这样做因为self.image字面上不能为零。

以下代码完全有效:

var image : UIImage?
self.scrollView.contentSize = image ? image!.size : CGSizeZero

注意:您必须使用"!"去打开"打开"可选变量image,以便您可以访问其size。这是安全的,因为您之前只是测试它不是零。

如果图像是隐式解包的可选项,这也可以使用:

var image : UIImage!
self.scrollView.contentSize = image ? image.size : CGSizeZero

答案 1 :(得分:0)

您正在描述条件赋值三元运算符?:,其操作如下:

(condition) ? (assign this value if the condition evaluates to true) : (assign this value if the condition evaluates to false)

因此,self.image必须是评估为truefalse的内容,Swift中的情况适用于符合LogicValue协议的任何内容

与Obj-C不同,只有对象的存在等同于true,Swift需要更多......我们获得了可以用作条件的可选值!

所以如果self.image是一个可选值,你所描述的是有效的,如果你看到错误就听起来不是这样

完善答案: