Suppose you want to keep track of one or more unique identifier(s). In this case, A
has two properties that are considered unique to A
, while B
has only one property that is unique to 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?
If there was just one unique key, we could do something like:
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
}
...but that limits me to one key.