在防范中创建非可选项以测试保护条件

时间:2018-01-31 13:14:55

标签: swift guard

我目前有这样的功能......

// 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
}

2 个答案:

答案 0 :(得分:7)

"技巧"是guard case使用value-binding pattern作为作业:

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

    currentString = newString
}

答案 1 :(得分:-1)

在展开可选值时使用Guard let。你的不可选。

func doSomething() {
    let newString: String = goGetANewString()

    if newstring != currentstring {
    currentstring = newstring
    } }

应该可以正常工作。