昨天我从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/