使用协议定义具有不同值的KeyPaths集合



假设您想要跟踪一个或多个唯一标识符。在这种情况下,A有两个被认为是A唯一的属性,而B只有一个B唯一的属性。

protocol HavingUID {
// Some way to use KeyPath?
}
struct A : HavingUID {
var unique1 : String  
var unique2 : Int
}
struct B : HavingUID {
var unique1 : Double
}
let a1 = A(unique1:"val", unique2: 1)
let a2 = A(unique1:"val", unique2: 2)
let b1 = B(unique1:0.5)
let b2 = B(unique1:0.0)
let b3 = B(unique1:0.2)
let arrA : [HavingUID] = [a1,a2]
let arrB : [HavingUID] = [b1,b2,b3]
// How to check arrA and arrB for duplicate UID properties?

如果只有一个唯一的密钥,我们可以做一些类似的事情:

protocol HavingUID {
typealias UID
static var uidKey : KeyPath<Self, UID> {get}
}
struct A : HavingUID {
static var uidKey = A.unique1
var unique1 : String
}
struct B : HavingUID {
static var uidKey = B.uniqueB
var uniqueB : Int
}

但这将我限制在一把钥匙上。

任何时候需要使用唯一标识符时,都应该使用全局结构或枚举来跟踪它们。这里有两种简单的方法:

结构:

struct UniqueIdentifiers {
static let id1 = "identifier_one"
static let id2 = "identifier_two"
static let id3 = "identifier_three"
}
let currentID = UniqueIdentifiers.id1

枚举:

enum UniqueIdentifiers: String {
case id1 = "identifier_one"
case id2 = "identifier_two"
case id3 = "identifier_three"
}
let currentID = UniqueIdentifiers.id1.rawValue

相关内容

  • 没有找到相关文章

最新更新