ken*_*nyc 3 generics macos swift
struct给定一个带有通用约束的基本 Swift,如下所示:
struct MetadataValue<T> {
var value:T
init(_ value:T) {
self.value = value
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以限制T它只能是某种允许类型中的一种吗?前任:
struct MetadataValue<T> where T:Double or T:Bool or T:String {
...
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用组合来“和”约束,但是我可以以某种方式“或”约束吗?
目标:
用例场景是我能够存储图像和视频等元数据属性及其相应的值。我跟踪数百个不同的属性,但每个属性的值都是已知类型:如 String、Integer 或 Double,但显然不能是泛型T可能意外接受的任意类型。
我可以以某种方式“或”限制吗?
你不能。然而,这将实现相同的目标。
定义一个新的协议:
protocol MetadataRawValue { }
Run Code Online (Sandbox Code Playgroud)
添加您的符合类型:
extension Double: MetadataRawValue { }
extension Bool: MetadataRawValue { }
extension String: MetadataRawValue { }
Run Code Online (Sandbox Code Playgroud)
最后:
struct MetadataValue<T> where T: MetadataRawValue {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |