给定一个带有通用约束的基本 Swift struct
:
struct MetadataValue<T> {
var value:T
init(_ value:T) {
self.value = value
}
}
有什么方法可以限制 T
使其只能是某种类型的允许类型中的一个?例如:
struct MetadataValue<T> where T:Double or T:Bool or T:String {
...
}
我知道我可以使用组合来“和”约束,但我能以某种方式“或”约束吗?
目标:
用例场景是让我能够存储元数据属性及其来自图像和视频等内容的相应值。我跟踪了数百个不同的属性,但每个属性的值都是已知类型:如 String、Integer 或 Double,但显然不能是泛型 T
可能意外接受的任意类型。
最佳答案
Can I "or" the constraints somehow?
不,你不能。但是,这将实现相同的目标。
定义一个新的协议(protocol):
protocol MetadataRawValue { }
添加符合类型:
extension Double: MetadataRawValue { }
extension Bool: MetadataRawValue { }
extension String: MetadataRawValue { }
最后:
struct MetadataValue<T> where T: MetadataRawValue {
...
}
关于swift - 你能否将 Swift 泛型约束限制为一组已知类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57893344/