我有一个名为 payment_list
的以下 struct
的实例列表:
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
可以实现这种类型吗?
最佳答案
Swift 4 添加了对键路径的支持,这允许做一些类似于你想要的事情:
let keyPath: KeyPath<Payment, Int> = \Payment.id
var payment = Payment(id: 42)
let value = payment[keyPath: keyPath] // returns 42
关键路径有两个通用参数:第一个是它操作的类型(在您的示例中 Payment
),以及它访问的属性的类型(Int
)。请注意,您必须为要访问的每个属性指定 key 路径。
关于swift - 是否可以在 Swift 4 中使用变量访问结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48480351/