Swift:正确地展开实例变量是可选的
我正在寻找在swift中展开实例变量的正确方法 我有一个singleton类,Swift:正确地展开实例变量是可选的,swift,coding-style,Swift,Coding Style,我正在寻找在swift中展开实例变量的正确方法 我有一个singleton类,shared属性可以是nil,我试图在另一个类的可失败初始化器中分配singleton的实例,这样我就可以使用singleton实例,而不必每次都将其展开 看起来是这样的: class A { static let shared = A() let b = 1 private init?() { return nil } } class B { let a: A init?()
shared
属性可以是nil,我试图在另一个类的可失败初始化器中分配singleton的实例,这样我就可以使用singleton实例,而不必每次都将其展开
看起来是这样的:
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!
}
保护let
或(如果let
存在)以避免此类构造
但是除了不让它成为可选的之外,没有办法避免处理可选的单例。有一个可选的单例实例是不常见的。您可以编写
B
的init?
,如下所示:
init?() {
guard let a = A.shared else { return nil }
self.a = a
print(a.b)
}
最好避免模式中的代码:
if someVar != nil {
x = someVar!
}
保护let
或(如果let
存在)以避免此类构造
但是除了不让它成为可选的之外,没有办法避免处理可选的单例。有一个可选的单例实例是很少见的。太好了,谢谢!那正是我想要的。太好了,谢谢!这正是我想要的。