gpt4 book ai didi

ios - Swift:在编译时将枚举值映射到类型

转载 作者:行者123 更新时间:2023-11-29 01:25:35 26 4
gpt4 key购买 nike

我在库目标中有一个枚举。像这样:

enum SomeEnum {
case EnumValue1
case EnumValue2
case EnumValue3
}

我的应用程序中有一些结构。像这样:

struct Struct1 {...}
struct Struct2 {...}
struct Struct3 {...}

我的目标是在编译时将此结构映射到我的应用程序中的枚举值。像这样:

extension SomeEnum {
case EnumValue1(Struct1)
case EnumValue2(Struct2)
case EnumValue3(Struct2)
}

但显然我不能在扩展中添加关联值。

库中的原始枚举不应该知道我的应用程序结构的任何信息。我想在应用程序端执行此映射。所以我不能修改我原来的枚举。我怎样才能做到这一点?

编辑:抱歉,我错过了一个用例示例。我想为每个枚举值创建一个相应结构类型的对象:

func createStruct<T>(type: T.Type) {
return T()
}

用法:

let enumValue = SomeEnum.EnumValue2
//here I should use an invented way of mapping enum value to struct:
let object = createStruct(enumValue.struct)

最佳答案

这是不可能的。来自 here

the raw-value type must conform to the Equatable protocol and one of the following literal-convertible protocols: IntegerLiteralConvertible for integer literals, FloatingPointLiteralConvertible for floating-point literals, StringLiteralConvertible for string literals that contain any number of characters, and ExtendedGraphemeClusterLiteralConvertible for string literals that contain only a single character.

即使你尝试实现Equatable协议(protocol) - 它也不会起作用。

struct Struct1 : Equatable {}

func ==(lhs: Struct1, rhs: Struct1) -> Bool {
return true // some code here
}

enum SomeEnum {
case EnumValue1 = Struct1
}

此代码无效。也许您应该创建一些与您的结构匹配的String

UPD:您可以使用关联值,如 docs 中所述。 .并且它将在编译期间而不是运行时进行。

struct Struct1 {}
struct Struct2 {}
struct Struct3 {}

enum SomeEnum {
case EnumValue1(Struct1)
case EnumValue2(Struct2)
case EnumValue3(Struct3)
}

关于ios - Swift:在编译时将枚举值映射到类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34060850/

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