[英]What is the existence operator in Swift?
在目标C中,这是有效的代码行
self.scrollView.contentSize = self.image ? self.image.size : CGSizeZero;
这是检查self.image是否为nil,然后选择left或right值。 在Swift中,我想重新创建同一行代码。 实际上,除了没有分号,应该完全一样
self.scrollView.contentSize = self.image ? self.image.size : CGSizeZero
但这在我的Swift代码中出现错误时无效,“ UIImage不符合协议LogicValue”
什么是正确的Swift代码?
如果self.image是可选的,则此代码有效。 否则就没有理由,因为self.image的字面值不能为零。
以下代码是完全有效的:
var image : UIImage?
self.scrollView.contentSize = image ? image!.size : CGSizeZero
注意:您必须使用“!” “打开”可选变量image
以便您可以访问其size
。 这是安全的,因为您只是事先测试了它不是零。
如果image是一个隐式展开的可选内容,这也将起作用:
var image : UIImage!
self.scrollView.contentSize = image ? image.size : CGSizeZero
您正在描述条件赋值三元运算符?:
,其操作方式如下:
(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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.