【问题标题】:How to use guard outside of function?如何在功能之外使用守卫?
【发布时间】:2024-01-03 11:32:01
【问题描述】:

是否可以在函数之外使用guard

下面会抛出一个需要使用 return 或 break 的错误,但在这种情况下是不可能的。

var var1 = String?()
guard let validVar = var1 else {
    print("not nil")
}

【问题讨论】:

  • 我还没找到办法,但你可以使用if let validVarTwo = var1{ validVar = validVarTwo }。不过看起来很丑
  • 如果不在函数内部,这是什么上下文?类定义?游乐场?

标签: swift2 guard-statement


【解决方案1】:

不,这是不可能的。要使用类中其他变量的知识来实例化变量,您可以使用惰性初始化或 getter。

var testString : String?
lazy var testString2 : String = {
     guard let t = self.testString else { return String()}
      return t
}()

如果我错了,请随时纠正我:)

guard 是为了我认为的函数的稳健性而设计的,如果条件错误,它会中断函数。所以如果你真的需要这个变量,它必须满足条件。就像 if let 但更干净:)

从您的示例中: var testString = String?() 无效。实例化一个 String 永远不会是 nil,所以不需要可选的。

编辑: 我在 Playground 中写了一个示例。

import UIKit

var var1 : String?

var validVar : String = {
    guard let validVar = var1 else {
        print("not nil")
        return "NIL"
    }
    return validVar
}()

print("\(validVar)")

【讨论】:

  • 您说代码无效,但它绝对可以正常工作。那么它有什么无效呢?
  • 好吧无效我是错误的词,但可选不是必需的,因为它的初始化并且不会失败。