gpt4 book ai didi

Swift "Enum"基础对象

转载 作者:行者123 更新时间:2023-11-28 09:57:08 24 4
gpt4 key购买 nike

如果我想为每个对象添加扩展,我可以执行以下操作:

extension AnyObject
{
func myFunc() { ... }
}

是否有类似的东西可以让我为每个枚举添加一个函数?换句话说,每个枚举的基“类”是什么?

最佳答案

首先,请注意,您不能像上面那样对 AnyObject 进行扩展,因为 AnyObject 是一个 protected 协议(protocol)(所有类隐式遵守)而不是一个类型。参见例如

但是,现在您可以扩展任何特定的类型,如上所示,例如,extension Int { ... }。但是 enum 不是类型;而是有序的原始可表示值的“容器”。因此,更有效的比较可能是 “如果我想通过 extension class 为每个类添加扩展......”,这自然更棘手。 p>

现在,所有具有 rawValuerawValue 初始化器的枚举都符合 protocol RawRepresentable ,因此您可以针对特定类型的原始值扩展此协议(protocol):

extension RawRepresentable where RawValue == Int {
var sqrt: Double {
return pow(Double(rawValue),(1/2))
}
}

并且此扩展属性将可用于显式使用相同原始值类型的所有枚举,在本例中为 Int:

enum MyIntegerLiteralEnum : Int {
case One = 1
case Two
case Three
case Four
}

print(MyIntegerLiteralEnum.One.sqrt)
print(MyIntegerLiteralEnum.Two.sqrt)
print(MyIntegerLiteralEnum.Four.sqrt)

/* 1.0
1.4142135623731
2.0 */

作为免责声明,请注意,此扩展将适用于所有符合 RawRepresentable 且具有 Int 类型的 rawValue 的类型,不仅是枚举类型。例如:

struct Foo : RawRepresentable {

typealias RawValue = Int
var bar : Int

var rawValue: RawValue {
get {
return bar
}
}

init(rawValue bar: Int) {
self.bar = bar
}
}

var a = Foo(rawValue: 16)
print(a.sqrt) // 4.0

关于Swift "Enum"基础对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34910991/

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