这个问题在这里已有答案:
我目前有这样的功能......
// this is a property
var currentString: String = ""
func doSomething() {
let newString: String = goGetANewString()
guard newString != currentString else {
return
}
currentString = newString
}
但我发现我在newString
之外创建guard
有点奇怪。
如果我把它移到guard
然后它抱怨它需要是可选的。
有没有办法在newString
声明中创建guard
并检查条件?
理想情况下,我喜欢这样的东西,但就像我说的那样,它不会这样。
func doSomething() {
guard let newString: String = goGetANewString(), newString != currentString else {
return
}
currentString = newString
}
“技巧”是使用guard case
和value-binding pattern进行分配:
func doSomething() {
guard case let newString = goGetANewString(), newString != currentString else {
return
}
currentString = newString
}
在展开可选值时使用Guard let。你的不是可选的。
func doSomething() {
let newString: String = goGetANewString()
if newstring != currentstring {
currentstring = newstring
} }
应该工作正常。