Swift 将不可故障初始值设定项委托给可故障初始值设定项
编辑 由于@Airspeed Velocity,我们找到了一个简单的解决方案,并添加了一些扭曲,因为这是从JSON解析的。允许初始值设定项获取Swift 将不可故障初始值设定项委托给可故障初始值设定项,swift,enums,initializer,Swift,Enums,Initializer,编辑 由于@Airspeed Velocity,我们找到了一个简单的解决方案,并添加了一些扭曲,因为这是从JSON解析的。允许初始值设定项获取AnyObject?,并默认为Unknown(或Invalid): // 原创 我实现了一个带有未知案例的枚举: enum Result: Int { case Success case Failure case Foo case Bar case FooBar case FooFoo ... case Unknown =
AnyObject?
,并默认为Unknown
(或Invalid
):
//
原创
我实现了一个带有未知
案例的枚举:
enum Result: Int {
case Success
case Failure
case Foo
case Bar
case FooBar
case FooFoo
...
case Unknown = -1
}
我想创建另一个初始值设定项,该初始值设定项接受Int
并返回Unknown
,用于枚举无法识别的大小写:
init(value: Int) {
self.init(rawValue: value)
if self == nil { // Complication Error
self = .Unknown
}
}
目前我的解决方案是工厂方法,但是初始值设定项会更干净:
static func resultWithValue(value: Int) -> Result {
if let result = self(rawValue: value) {
return result
}
return .Unknown
}
虽然不能委托给故障初始值设定项,但由于枚举是值类型,您可以尝试使用故障初始值设定项创建同一枚举的另一个值,然后在
nil
的情况下替换默认值,并将其分配给self
:
enum Result: Int {
case Success
case Failure
case Unknown = -1
init(value: Int) {
self = Result(rawValue: value) ?? .Unknown
}
}
Result(value: 100) == .Unknown // returns true
谢谢我很尴尬,我没有想到在初始值设定项中使用类型名称。哈!我一直坚持要通过尝试使用
self.init(..
)使其工作。不可能。当我看到解决方案只是self=
等时,我感到很奇怪:-)谢谢。如果其他任何人试图创建一个初始值设定项,该初始值设定项委托给一个失败的初始值设定项,但在失败时停止执行(例如PredicateFailure())以下工作:init(unsafeValue:Int){guard let result=result(rawValue:unsafeValue)else{premissionfailure(“不安全的值不是有效的结果”)}self=result}
查看是否需要在self=
不可用的类上执行类似操作。
enum Result: Int {
case Success
case Failure
case Unknown = -1
init(value: Int) {
self = Result(rawValue: value) ?? .Unknown
}
}
Result(value: 100) == .Unknown // returns true