gpt4 book ai didi

swift - 具有约束的通用类型的关联值的枚举案例

转载 作者:搜寻专家 更新时间:2023-10-31 19:30:32 26 4
gpt4 key购买 nike

有没有办法使用泛型和类型约束,将这个enum 的前两种情况合并为一种?

enum AllowedValueRange {

// Associated value represents (min, max). 'nil' represents
// "no limit" for that interval end (+/- infinity)
case IntegerRange(Int?, Int?)


// Associated value represents (min, max). 'nil' represents
// "no limit" for that interval end (+/- infinity)
case FloatRange(Float?, Float?)


// A finite set of specific values of any type
case ArbitrarySet([Any])

// (...Other cases with different structure of associated values
// or no associated values...)
}

附录:我知道我可以为整个 enum 指定一个通用类型,但只有这两种类型需要一个。此外,我认为它需要同时符合 EquatableComparable,但我无法完全找到指定的语法......


编辑:结果是 Comparable 包含 Equatable(?),所以也许我可以这样做:

enum AllowedValueRange {

// Associated value represents (min, max). 'nil' represents
// "no limit" for that interval end (+/- infinity)
case NumericRange((min:Comparable?, max:Comparable?))

// (rest omitted)

(还将一对关联值与单个命名元组的两个值交换)

最佳答案

可以定义

enum AllowedValueRange {
case NumericRange((min:Comparable?, max:Comparable?))
}

但这将允许你用两个来实例化一个值不相关 可比类型,例如

let range = AllowedValueRange.NumericRange((min: 12, max: "foo"))

这可能不是您想要的。所以你需要一个通用类型(仅限于具有可比性):

enum AllowedValueRange<T: Comparable> {
case NumericRange((min:T?, max:T?))
}

关于swift - 具有约束的通用类型的关联值的枚举案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34060229/

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