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

问题描述

假设您要跟踪一个或多个唯一标识符。在这种情况下,next.config.js const withImages = require('next-images') module.exports = withImages() 具有两个对于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?

...但是那限制了我一键。

解决方法

每当您需要使用唯一标识符时,绝对应该使用全局结构或枚举来跟踪它们。这是两种简单的方法:

结构:

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