从单例初始值设定项中抛出异常

时间:2017-01-31 13:36:55

标签: swift swift3 singleton

我有一个管理一组数据的单例。如果由于某种原因数据不可用,我希望通过抛出异常来创建单例失败。编译器不是用throws标记getter的粉丝。注意:我意识到我可以处理其他方式,但现在我很好奇,如果它甚至可能。

class Foo {
  class var `default`: Foo {
    let instance = Foo()

    return instance
  }

  private init() throws {
    // Throw if unable to load required data...
  }
}

1 个答案:

答案 0 :(得分:1)

你可以这样做(来自我的游乐场的代码),你的单身人士的每次调用都必须通过尝试完成。



enum FooError : Error {
  case RuntimeError(String)
}

class Foo {
  static func defaultFoo() throws -> Foo {
    if let instance = Foo("Success") {
      return instance
    } else {
      throw FooError.RuntimeError("Singleton is not created")
    }
  }

  private init?(_ parameter: String?) {
    if let _ = parameter {
      print("Init Succeded")
    } else {
      print("Init failed")
      return nil;
    }
  }
}

try Foo.defaultFoo()