昨天我从Xcode收到一个编译错误,说
二进制运算符“&&”不能应用于两个Bool操作数[1]

if text != nil && presentingViewController != nil {
    ...
}

text在前面定义为
var text: String = "" {
    didSet {
        ...
    }
}

presentingViewController来自UIViewController,这是super类。
我的一个朋友告诉我,这是由〈cc〉引起的,是〈cc〉,这个问题是通过改变来解决的
var text: String


var text: String?

然而,它仍然困扰着我为什么显式定义的text变成String!。有谁能提供这个隐式转换的细节吗?
[1]这个编译错误没有意义,这个问题不是another question of the same compilation error的副本。

最佳答案

你的问题与swift中所谓的“期权”有关。
在Objective-C中,可以引用NSString,它可以指向NSString实例,也可以指向nil。在斯威夫特这是不同的!
swift中的“常规”字符串永远不能为零。只有“可选”字符串可以为零。这就是它在swift代码中的外观:

var myRegularString  : String      // this can never be nil, can't compare to nil
var myOptionalString : String?     // this can be nil (note the ?)

你有一根“普通”的绳子。所以当你试图将它与nil进行比较时,编译器会抱怨。
选项说明如下:Swift Programming Language/Basics/Optionals

关于ios - 为什么String隐式变成String!在 swift ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30996939/

10-16 14:32