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()

有没有更短的方法(使用 guardif 等)?

Binit?可以这样写:

init?() {
    guard let a = A.shared else { return nil }

    self.a = a
    print(a.b)
}

最好避免模式中的代码:

if someVar != nil {
    x = someVar!
}

guard letif let 的存在是为了避免这种构造。

但是除了不让它成为可选之外,没有办法避免处理你的可选单例。有一个可选的单例实例是不寻常的。