为什么编译器告诉我需要解包Bool(非可选?)

A O*_*A O 4 optional swift

根据Swift标题 String

该属性isEmptyBool(不是可选的权利?)

public var isEmpty: Bool { get }
Run Code Online (Sandbox Code Playgroud)

但在我的代码中,当我尝试写:

!sender.titleOfSelectedItem?.isEmpty
Run Code Online (Sandbox Code Playgroud)

Bool?未打开的可选类型的值,您的意思是使用"?" 要么 "!"

为什么编译器认为这isEmpty是可选的?

是因为包含该属性的对象当前是可选的吗?

titleOfSelectedItem 是一个 String?

或者我完全错过了什么,在这里?

vac*_*ama 8

sender.titleOfSelectedItem?.isEmpty是一个可选的链,并具有类型,Bool?因为nil如果titleOfSelectedItem是,它可以返回nil.

您应该决定如何处理nil案例.您可以将可选链nil合并运算符组合 ??以安全地打开结果:

// treat nil as empty
let empty = sender.titleOfSelectedItem?.isEmpty ?? true
Run Code Online (Sandbox Code Playgroud)

或者您可以将值与false以下值进行比较:

if sender.titleOfSelectedItem?.isEmpty == false {
    // value isn't nil and it isn't empty
}
Run Code Online (Sandbox Code Playgroud)

或者你可以比较价值true:

if sender.titleOfSelectedItem?.isEmpty == true {
    // value isn't nil and it is an empty String
}
Run Code Online (Sandbox Code Playgroud)