在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代码?
答案 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
必须是评估为true
或false
的内容,Swift中的情况适用于符合LogicValue
协议的任何内容
与Obj-C不同,只有对象的存在等同于true
,Swift需要更多......我们获得了可以用作条件的可选值!
所以如果self.image
是一个可选值,你所描述的是有效的,如果你看到错误就听起来不是这样
完善答案:
如果self.image不是可选的,它永远不会是零,所以你可以安全地完成作业而不进行条件检查
如果某些时候self.image可能为nil,则它必须是可选类型之一,UIImage?
或UIImage!
(隐式展开可选,请参阅https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html)