是否可以在函数之外使用guard
?
以下引发了一个需要使用返回或中断的错误,但在这种情况下是不可能的。
var var1 = String?()
guard let validVar = var1 else {
print("not nil")
}
答案 0 :(得分:5)
不可能。要使用类中其他变量的知识来实例化变量,可以使用延迟初始化或getter。
var testString : String?
lazy var testString2 : String = {
guard let t = self.testString else { return String()}
return t
}()
如果我错了,请随时纠正我:)
保护是为了我认为的功能的稳健性,并且如果条件错误将在功能中休息。所以,如果你真的需要这个变量,它必须满足条件。就像一个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)")