我已获得以下struct
名为payment_list
的实例列表:
struct Payment: Codable {
let id: Int
let payment_hash: String
let destination: String
let msatoshi: Int
let timestamp: Int
let created_at: Int
let status: String
enum PaymentKeys: String, CodingKey {
case payments
}
}
我可以通过以下方式访问列表中每个struct
实例的成员:
print(payment_list[0].id) // 1
print(payment_list[0].timestamp) // 1517083775
是否可以使用变量访问那些struct
实例成员以确定正在访问哪个成员?有点像:
var column = "id"
print(payment_list[0][column]) // 1
我已经了解了使用NSObject
和value(forKey key: String)
的人,但这是struct
,因此无法继承NSObject
。如果它是一个对象,我认为它看起来像这样:
var column = "id"
print(payment_list[0].value(forKey key: column)) // 1
struct
可以使用这种类型的东西吗?
答案 0 :(得分:2)
Swift 4增加了对关键路径的支持,这些路径允许类似做你想要的事情:
let keyPath: KeyPath<Payment, Int> = \Payment.id
var payment = Payment(id: 42)
let value = payment[keyPath: keyPath] // returns 42
密钥路径有两个通用参数:首先是它操作的类型(在您的示例中为Payment
),以及它访问的属性的类型(Int
)。请注意,您必须为要访问的每个属性指定密钥路径。