在我的自定义swift框架中,我有一个最终用户将使用的单例类。如果在初始化期间出现任何问题,单例init()会做很多工作,我想抛出错误。
public class mySingleton: NSObject {
.......
public static let sharedInstance = mySingleton(singleton : true)
....
}
private override convenience init() {
assertionFailure( "Please use sharedInstance" )
self.init(singleton : false)
}
private init(singleton: true) {
super.init()
//Other class objects init() etc.
//Some other processing etc.
}
//Initialise framework
mySingleton.sharedInstance
在mySingleTon init过程中向最终用户抛出错误/异常的最佳方法是什么。
答案 0 :(得分:0)
<强>已更新强>
具有隐式展开值的变体:
public class MySingleton: NSObject {
private static var _sharedInstance: MySingleton!
public static var sharedInstance: MySingleton! {
if _sharedInstance == nil {
let instance = MySingleton()
if let error = instance.initializationError {
//log an error
print("An error occured during singleton object instantiation: \(error)")
return nil
}
_sharedInstance = instance
}
return _sharedInstance
}
var initializationError: ErrorType?
private override init() {
super.init()
//Other class objects init() etc.
//Some other processing etc.
do {
try initialize()
} catch {
initializationError = error
}
}
private func initialize() throws {
throw NSError(domain: "my.error", code: -1, userInfo: nil)
}
}
答案 1 :(得分:0)
如果您想抛出错误或使init失败与某些条件有关,请使用可用的初始化程序
struct Animal {
let species: String
init?(species: String) {
if species.isEmpty { return nil }
self.species = species
}
}
希望这应该有所帮助
答案 2 :(得分:0)
你应该真的,真的想想你的意图在这里。
单例创建一次,并为应用程序的其余部分保持活动状态。如果创建单例失败,您的应用程序将执行什么操作?我使用单身人士的地方,必须成功。如果他们不这样做,我的应用程序无法运行。
如果创建单例失败,那么最好是产生一个会杀死应用程序的断言。另一方面,在许多有问题的情况下(例如,缺少网络连接),单个的创建不应该失败。