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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建非可选的防范措施以测试防护条件[重复]相关的知识,希望对你有一定的参考价值。

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

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

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

应该工作正常。

以上是关于创建非可选的防范措施以测试防护条件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

非可选的展开值

iOS Core Data - 用于将关系从非可选更改为可选的轻量级迁移

Xcode 在非可选的字符串上返回 nil

Swift 中的相互非可选引用循环

Swift之深入解析如何处理非可选的可选项类型

Xcode NSManagedObject 子类在它们被标记为非可选时包含可选