gpt4 book ai didi

enums - 如何避免使用 Swift 2.0 枚举重复自己

转载 作者:行者123 更新时间:2023-12-02 08:27:07 26 4
gpt4 key购买 nike

我有多个带有原始值的枚举,但我不喜欢每次从原始值初始化一个时都说 rawValue:,所以我提供了一个替代的委托(delegate)初始化器没有外部标签:

enum E1 : Int {
case One, Two
init?(_ what:Int) {
self.init(rawValue:what)
}
}
enum E2 : Int {
case One, Two
init?(_ what:Int) {
self.init(rawValue:what)
}
}

非常好。我可以说 let e = E1(0) 然后正确的事情发生了。

现在我想合并重复的代码。我希望 Swift 2.0 协议(protocol)扩展允许我这样做——在 一个 位置编写 init?(_ what:Int) 初始化程序并在 中注入(inject)/继承它em>both 枚举。但是,我还没有找到可行的方法。问题是协议(protocol)扩展不知道采纳者将拥有一个init(rawValue:)初始化器,我还没有找到让它安心的方法。

我怀疑这是因为 rawValue 初始值设定项存在的自动方式,所以可能什么也做不了。但也许有人有建议。

最佳答案

听起来您正在寻求扩展 RawRepresentable 协议(protocol):

extension RawRepresentable {
init?(_ what: RawValue) {
self.init(rawValue: what)
}
}

任何具有原始类型的枚举都会自动符合 RawRepresentable,因此您不必让 E1E2 符合任何额外的协议(protocol):

enum E1: Int {
case One = 1, Two
}

enum E2: String {
case One = "1", Two = "2"
}

let e1 = E1(1) // .One
let e2 = E2("2") // .Two

关于enums - 如何避免使用 Swift 2.0 枚举重复自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31174500/

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