Swift 检查可选的isEqualToString
我有一个例子,我想检查一个可选值是否等于一个字符串。 首先我必须打开它来检查它是否存在,然后我想检查它是否等于另一个字符串。然而,这给了我一个问题,我必须写两次相同的代码。我给你举个例子:Swift 检查可选的isEqualToString,swift,optional-variables,Swift,Optional Variables,我有一个例子,我想检查一个可选值是否等于一个字符串。 首先我必须打开它来检查它是否存在,然后我想检查它是否等于另一个字符串。然而,这给了我一个问题,我必须写两次相同的代码。我给你举个例子: var person : Person = Person() if let name = person.name { if name.isEqualToString("John") { println("Hello, John!") }
var person : Person = Person()
if let name = person.name {
if name.isEqualToString("John") {
println("Hello, John!")
}
else {
println("Wait a minute, you're not John!")
}
else {
println("Wait a minute, you're not John!")
}
正如你所看到的,我必须写两次else语句。一次,如果名称存在,但不是“John”,另一次,如果名称不存在
我的问题是,如何以正确的方式做到这一点
谢谢你的帮助 由于您测试的是三种不同的条件:正确值、错误值或无值,因此会有一定数量的重复
var person : Person = Person()
let name = person.name
if (name != nil && name! == "John")
{
println("Hello, John!")
}
else
{
println("Wait a minute, you're not John!")
}
通过将复制提取到一个新方法中,可以将此最小化,例如:
func notJohn() {
println("Wait a minute, you're not John!")
}
if let name = person.name {
if (name == "John") {
println("Hello, John")
} else {
notJohn()
}
} else {
notJohn()
}
可选
在Swift标准库中为其定义了一个=
运算符:
func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
func==(左:T?,右:T?)->Bool
这意味着,如果可选项包含一个相等的值,则可以比较两个可选项。如果两个选项都为零,则它们相等,如果两个选项的值相等,则它们相等
因此,如果您不关心person.name
是否为nil
,只要它是否包含“John”值,您就可以编写如果person.name==“John”
当“John”是字符串而不是字符串?
?*时,它是如何工作的?因为如果参数需要,Swift将隐式地将任何类型转换为可选的包装类型。因此,因为用于比较选项的=
函数需要一个字符串?
参数,“John”将隐式转换为{Some“John”}
,从而允许使用两个选项之间的=
运算符
*事实上“John”也不是一个字符串,它是一个正在转换为字符串的字符串文本。在这种情况下,有没有理由使用.isEqualToString
而不是=
?我想不出一个,但也许我错过了什么=
应与两边的NSString
或String
(或字符串文字)一起使用。感谢您的回复。这是有效的,但仅当person.name已设置时有效。如果尚未设置名称,我会收到警告“在展开可选值时意外发现nil”。我有一些情况下没有设置名称,因此总结起来,我想检查它是否为“John”而不是“nil”。即使未设置名称
,您也应该能够使用=
。检查它是否等于John应该足以确认它不是零。例如,在操场上运行此命令:let s:NSString?=无s==“John”//返回false,无错误
。您确定语句的其他部分没有被强制展开吗?其中可能有as
?是的,您是正确的!玩过之后,我让它开始工作了。这就是我最终得到的结果,它似乎工作得很好:var person:person=person()让name:String?=person.name if name==“John”{println(“你好,\(name!)”)else{println(“等等,你不是John!”)}
非常感谢你的帮助。谢谢你的回复。这仍然会引发错误:“在展开可选值时意外发现nil”。这种类型的代码过去在objective C中工作,但在swift中,它确实不喜欢检查某些内容是否为零。我错过什么了吗?