Swift: 正确解包实例变量的可选
Swift: Unwrap optional to the instance variable properly
我正在寻找在 swift.
中将可选对象解包到实例变量的正确方法
我有一个单例 class,shared
属性 其中可以为零,我正在尝试在另一个 [的可失败初始化器中分配单例的实例=23=] 这样我就可以使用单例实例而不必每次都打开它。
看起来像这样:
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.
中将可选对象解包到实例变量的正确方法我有一个单例 class,shared
属性 其中可以为零,我正在尝试在另一个 [的可失败初始化器中分配单例的实例=23=] 这样我就可以使用单例实例而不必每次都打开它。
看起来像这样:
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
的存在是为了避免这种构造。
但是除了不让它成为可选之外,没有办法避免处理你的可选单例。有一个可选的单例实例是不寻常的。