2015-04-02 83 views
2

我想將som Objective-C代碼轉換爲swift,並且我有下面的語句,我堅持使用它。與bool的空合併運算符

我將如何轉換:

self.viewController.view.alpha = !self.viewDisabled ?: 0; 

斯威夫特?

viewController.view.alpha = !self.viewDisabled ?? 0 

斯威夫特空合併操作這麼想的似乎因爲我得到一個「二元算‘?’工作不能應用於'bool'類型的操作數「錯誤。 我在做什麼錯?

+0

順便說一句,在你的Objective-C的例子,使用':'是完全沒有必要的。 '!self.viewDisabled?:0'就和'!self.viewDisabled'一樣# – newacct 2015-04-03 08:15:04

回答

2

Nil-coalescing operator與布爾值無關。

使用完整形式三元運算符:

viewController.view.alpha = viewDisabled ? 0 : 1 
2

無聚結被用於可選變量。正如文件中所述的,無凝聚對應於:

a != nil ? a! : b //if a has value, return unwrapped value of a, else return b 

考慮這些例子:

var optionalBoolean : Bool? //don't have value (or == nil) 
var falseBoolean : Bool = false 

var a = optionalBoolean ?? true //return true cause optionalBoolean does not have value, so it return 'true' 
var b = falseBoolean ?? true //return false cause falseBoolean has value = false. 
+0

你可以這樣做'var b = falseBoolean? true',但不能做'var c = falseBoolean!= nil? falseBoolean! :當蘋果說'真'時''a ?? b'是'a!= nil?a!:b'的簡寫。 – 2015-04-02 10:37:18

+0

你不能。因爲falseBoolean不是可選變量。你無法將它與零比較。 – 2015-04-02 12:11:08

+0

你爲什麼'var b = falseBoolean?那麼真的嗎? – 2015-04-02 13:20:54

相關問題