是否可以使用Swift 4中的变量访问struct成员?

时间:2018-01-27 20:43:24

标签: swift struct

我已获得以下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

我已经了解了使用NSObjectvalue(forKey key: String)的人,但这是struct,因此无法继承NSObject。如果它一个对象,我认为它看起来像这样:

var column = "id"
print(payment_list[0].value(forKey key: column)) // 1

struct可以使用这种类型的东西吗?

1 个答案:

答案 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)。请注意,您必须为要访问的每个属性指定密钥路径。