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

标签 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 等)?

最佳答案

Binit?可以这样写:

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

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

最好避免模式中的代码:

if someVar != nil {
    x = someVar!
}

guard letif let 存在以避免此类构造。

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

关于Swift:正确解包实例变量的可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50866093/

相关文章:

ios - swift 改变语言

java - 在 Intellij Idea 中禁用 java doc 自动格式化。 2019年

javascript - 用于标记私有(private)成员的前导下划线

c# - SharpDevelop 改变代码风格

C++ "Best"参数传递方式

ios - DragInteraction itemsForBeginning 未触发

ios - 设置 UITextField 的最大 int 值(不是字符数)

Swift println() 输出重复字符

swift - 使用 CLLocationSpeed 显示设备行进的速度

Pythonic : range vs enumerate in python for loop