gpt4 book ai didi

swift - 将不可失败的初始化器委托(delegate)给可失败的初始化器

转载 作者:搜寻专家 更新时间:2023-10-30 22:28:41 24 4
gpt4 key购买 nike

编辑

感谢@Airspeed Velocity,找到了一个简单的解决方案,添加了一点扭曲,因为它是从 JSON 解析的。允许初始化器采用 AnyObject? 并默认为 Unknown(或 Invalid):

init(value: AnyObject?) {
if let value = value as? Int
,let result = Result(rawValue: value) {
self = result
} else {
self = .Unknown
}
}

//

原创

我已经实现了一个带有Unknown 案例的枚举:

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
}

最佳答案

虽然你不能委托(delegate)给一个可失败的初始化器,因为枚举是值类型,你可以尝试使用可失败的初始化器创建相同枚举的另一个值,然后在 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

关于swift - 将不可失败的初始化器委托(delegate)给可失败的初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29656255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com