我正在寻找在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
等)?
答案 0 :(得分:2)
您可以按如下方式编写init?
B
:
init?() {
guard let a = A.shared else { return nil }
self.a = a
print(a.b)
}
最好避免模式中的代码:
if someVar != nil {
x = someVar!
}
guard let
或if let
的存在是为了避免此类构造。
但是没有办法避免处理你的可选单例,而不是让它成为可选的。有一个可选的单例实例是不寻常的。