可选类型 '$T11' 不能用作布尔值;自安装 XCode 6 beta 7 以来测试 '!= nil'

Posted

技术标签:

【中文标题】可选类型 \'$T11\' 不能用作布尔值;自安装 XCode 6 beta 7 以来测试 \'!= nil\'【英文标题】:Optional type '$T11' cannot be used as a boolean; test for '!= nil' instead since installing XCode 6 beta 7可选类型 '$T11' 不能用作布尔值;自安装 XCode 6 beta 7 以来测试 '!= nil' 【发布时间】:2014-09-03 15:18:03 【问题描述】:

这是我收到错误的代码:

for (key, value) in info 
    let fieldValue: AnyObject? = value

    if (!fieldValue || fieldValue?.length == 0)  // this line gives the error
        informationComplete = false;
     

这是 XCode 建议我使用的,它会导致另一个错误:

for (key, value) in info 
    let fieldValue: AnyObject? = value

    if ((!fieldValue || fieldValue?.length == 0) != nil)  //bool not convertible to string
        informationComplete = false;
    
 

感谢您的帮助。

感谢您的宝贵时间

【问题讨论】:

【参考方案1】:

Optionals 不再被视为布尔表达式(如 Swift 参考中所述 - Revision History):

当它们有值时,Optionals 不再隐式地计算为 true,而当它们没有值时,它们不再隐式地计算为 false,以避免在使用可选的 Bool 值时产生混淆。相反,请使用 == 或 != 运算符对 nil 进行显式检查,以确定可选项是否包含值。

所以你必须明确如下:

if (fieldValue == nil || ...

我记得在 beta 6 中发生了变化 - 你使用的是 beta 5 吗?

【讨论】:

谢谢。我为那个修订列表添加了书签。我之前认为我使用的是 XCode beta 3 或 4。

以上是关于可选类型 '$T11' 不能用作布尔值;自安装 XCode 6 beta 7 以来测试 '!= nil'的主要内容,如果未能解决你的问题,请参考以下文章

当类型已知时,类型“T”不能用作泛型类型中的类型参数或方法错误

检查Optional Bool的值

为啥我不能强制解开我的 $string 以用作 TextField 值?

自安装 Zip 档案(解压后运行应用程序)

不能将类引用用作非类型模板参数

不能将 chan chan int 类型的变量用作 <-chan <-chan int 值