Swift:正确解包实例变量的可选项

时间:2018-06-14 21:18:27

标签: swift coding-style

我正在寻找在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()

有没有办法以较短的方式执行此操作(使用guardif等)?

1 个答案:

答案 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 letif let的存在是为了避免此类构造。

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