我正在寻找在 swift 中将可选对象解包到实例变量的正确方法。
我有一个单例类,shared
属性可以为 nil,我试图在另一个类的可失败初始化器中分配单例的实例,以便我可以使用单例实例而不必每次都打开它。
看起来像这样:
class A {
static let shared = A()
let b = 1
private init?() {
return nil
}
}
class B {
let a: A
init?() {
if A.shared != nil {
a = A.shared!
} else {
return nil
}
print(a.b)
}
}
B()
有没有更短的方法(使用 guard
、if
等)?
最佳答案
B
的init?
可以这样写:
init?() {
guard let a = A.shared else { return nil }
self.a = a
print(a.b)
}
最好避免模式中的代码:
if someVar != nil {
x = someVar!
}
guard let
或 if let
存在以避免此类构造。
但是除了不让它成为可选之外,没有办法避免处理你的可选单例。有一个可选的单例实例是不寻常的。
关于Swift:正确解包实例变量的可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50866093/