在守卫中创建非可选的以测试守卫条件
Create non-optional in guard to test guarded condition
我目前有这样的功能...
// this is a property
var currentString: String = ""
func doSomething() {
let newString: String = goGetANewString()
guard newString != currentString else {
return
}
currentString = newString
}
但是我发现我在 guard
之外创建 newString
有点奇怪。
如果我将它移到 guard
然后它会抱怨它需要是可选的。
有没有办法在 guard
语句中创建 newString
并检查条件?
理想情况下,我想要这样的东西,但就像我说的,这样行不通。
func doSomething() {
guard let newString: String = goGetANewString(), newString != currentString else {
return
}
currentString = newString
}
"trick" 是使用 guard case
和 value-binding pattern 进行赋值:
func doSomething() {
guard case let newString = goGetANewString(), newString != currentString else {
return
}
currentString = newString
}
我目前有这样的功能...
// this is a property
var currentString: String = ""
func doSomething() {
let newString: String = goGetANewString()
guard newString != currentString else {
return
}
currentString = newString
}
但是我发现我在 guard
之外创建 newString
有点奇怪。
如果我将它移到 guard
然后它会抱怨它需要是可选的。
有没有办法在 guard
语句中创建 newString
并检查条件?
理想情况下,我想要这样的东西,但就像我说的,这样行不通。
func doSomething() {
guard let newString: String = goGetANewString(), newString != currentString else {
return
}
currentString = newString
}
"trick" 是使用 guard case
和 value-binding pattern 进行赋值:
func doSomething() {
guard case let newString = goGetANewString(), newString != currentString else {
return
}
currentString = newString
}