Swift比较Strings选项与非选项

WYS*_*WYS 5 ios swift

在比较Swift中的字符串时,可以将非可选字符串与可选字符串进行比较.

像这样(文本是可选的,它是空的):

UITextField.text == "" // True
Run Code Online (Sandbox Code Playgroud)

是因为平等运算符单独解开字符串吗?

Sul*_*han 18

对于每种Equatable类型,==操作也定义为可选项:

public func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
Run Code Online (Sandbox Code Playgroud)

右侧的非可选项会自动提升为可选项.

当两个值都是或者如果它们都是非零并且它们相等时,==for选项会返回.truenil

  • 附注:在Swift 3中将删除带有可选参数的相应*comparison*运算符:https://github.com/apple/swift-evolution/blob/master/proposals/0121-remove-optional-comparison-operators.md . (3认同)

Jac*_*ill 2

您的理论在以下示例中不成立:

\n\n
let x: String? = nil\n\nif x == "" {\n    print("True")\n} else {\n    print("False") //Printed\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里实际发生的情况是,该text属性实际上从未在初始化时实际发生过,而是一个空字符串,如文档nil所示:

\n\n
\n

该字符串默认为@""。

\n
\n\n

Swift 编译器不会隐式解包任何选项,而是将责任留给程序员。

\n