我有一个 struct MyStruct
.它可以从字符串初始化,但有许多方法可以使字符串无效.与其简单地创建一个在所有故障情况下返回相同nil
的失败初始化器init?(string: String)
,我更希望有一个返回结果类型Result<MyStruct, Error>
的初始化器,这样调用方法就可以知道发生了哪个故障情况并报告一个信息性错误.
我可以写一个方法static func makeNew(string: String) -> Result<Self, Error>
.这样的话而不是打电话给
guard let new = MyStruct(string: someString) else {
print("\(someString) was invalid somehow.")
}
print("Object created.)
我可以这样拨打makeNew
:
switch MyStruct.makeNew(string: someString) {
case .success(let new):
print("Object created")
case .failure(let error):
switch error {
// handle each specific error appropriately
}
}
这是唯一的办法吗,还是SWIFT给了我们一个真正的初始化器来做这件事?