gpt4 book ai didi

swift - 从 rawValue 初始化通用类型的枚举

转载 作者:可可西里 更新时间:2023-11-01 01:19:51 25 4
gpt4 key购买 nike

我正在 Swift 中试验自定义运算符 (试验。我不需要讲授自定义运算符为什么不好) 我想,嗯,EnumType(rawValue:) 有点长.也许我可以找接线员解决这个问题?所以我写道:

infix operator ∑
func ∑ <T,U:RawRepresentable>(lhs:T,rhs:U.Type) {
rhs(rawValue: lhs)
}

如本示例所示,将按预期使用:

enum DiceResult: Int {
case one = 1, two, three, four, five, six
}
let roll = 1 ∑ DiceResult //DiceResult.one

但是我写的代码给了我这个错误:

Non-nominal type 'U' does not support explicit initialization

老实说,我没想到我写的东西无论如何都能工作,而且我什至不确定像我想写的东西在 Swift 中是否完全可行。任何人都可以阐明我是否可以做这样的事情,如果可以,怎么做?

最佳答案

主要错误是您将操作数类型UT 视为独立的。但是左操作数的类型必须是右操作数的 RawValue 类型。所以这将编译:

infix operator ∑
func ∑ <U: RawRepresentable>(lhs: U.RawValue, rhs: U.Type) -> U? {
return rhs.init(rawValue: lhs)
}

然后您可以将其用作

enum DiceResult: Int {
case one = 1, two, three, four, five, six
}
let roll = 1 ∑ DiceResult.self

.self 需要将类型作为值访问。不幸的是,这并不比

let roll = DiceResult(rawValue: 1)

关于swift - 从 rawValue 初始化通用类型的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392496/

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