创建非可选的防范措施以测试防护条件[重复]

问题描述 投票:5回答:2

这个问题在这里已有答案:

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

// 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
}
swift guard
2个回答
7
投票

“技巧”是使用guard casevalue-binding pattern进行分配:

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

    currentString = newString
}

-1
投票

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

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

    if newstring != currentstring {
    currentstring = newstring
    } }

应该工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.