[英]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.