在守卫中创建非可选的以测试守卫条件

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 casevalue-binding pattern 进行赋值:

func doSomething() {
    guard case let newString = goGetANewString(), newString != currentString else {
        return
    }

    currentString = newString
}