swift - 你能否将 Swift 泛型约束限制为一组已知类型?

标签 swift macos generics

给定一个带有通用约束的基本 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/

相关文章:

swift - tvOS/swift 3 : How fix broken UICollectionView selection animation?

ios - 尝试使用 swift 从自签名服务器获取数据,用于 iOS 应用程序开发

ios - 将 S3 对象上传到数据库的正确过程是什么

ios - 核心数据未保存

macos - 如何将 NSButton 放置在 NSTableView 上

java - 反射问题,将数据库映射到对象java-android

c++ - 半泛型函数

objective-c - 无法将 QuickTime 影片 View 添加到 Cocoa 应用程序

macos - 在 OS X 中使用委托(delegate)

c# - Linq 中的通用查询