根据String
属性isEmpty
是Bool
(不是可选的权利?)
public var isEmpty: Bool { get }
但在我的代码中,当我尝试写:
!sender.titleOfSelectedItem?.isEmpty
未打开的可选类型
Bool?
的值,是否意味着使用"?" 或"!"
为什么编译器认为isEmpty
是可选的?
是否因为包含该属性的对象当前是可选的?
titleOfSelectedItem
是String?
或者我完全错过了什么,这里?
答案 0 :(得分:8)
sender.titleOfSelectedItem?.isEmpty
是一个可选链,其类型为Bool?
,因为如果nil
为titleOfSelectedItem
,它可以返回nil
。
您应该决定如何处理nil
案例。您可以将可选链与 nil合并运算符 ??
结合使用,以安全地解包结果:
// treat nil as empty
let empty = sender.titleOfSelectedItem?.isEmpty ?? true
或者您可以将该值与false
进行比较:
if sender.titleOfSelectedItem?.isEmpty == false {
// value isn't nil and it isn't empty
}
或者您可以与true
的值进行比较:
if sender.titleOfSelectedItem?.isEmpty == true {
// value isn't nil and it is an empty String
}