6

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

以下会引发需要使用 return 或 break 的错误,但在这种情况下这是不可能的。

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

1 回答 1

5

不,它不可能。要使用类中其他变量的知识来实例化变量,您可以使用延迟初始化或 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,所以不需要可选的。

编辑: 我在我的操场上写了一个例子。

import UIKit

var var1 : String?

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

print("\(validVar)")
于 2015-09-29T04:57:05.703 回答