2015-04-02 68 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

相关问题