Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:正确地展开实例变量是可选的_Swift_Coding Style - Fatal编程技术网

Swift:正确地展开实例变量是可选的

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

我正在寻找在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?() {
    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
存在)以避免此类构造


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

太好了,谢谢!那正是我想要的。太好了,谢谢!这正是我想要的。