swift - 是否可以在 Swift 4 中使用变量访问结构成员?

标签 swift struct

我有一个名为 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

我读过有人使用 NSObjectvalue(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/

相关文章:

ios - 在 Swift 中放置在 UIViewController 内的 tableView 上的无限滚动

ios - 搜索并返回 cloudkit 记录的单个字段

ios - 选择 Collection View 中的单元格到新 Controller

c - 如何通过 C 中的函数引用来传递数组?

嵌套在函数中的快速结构

c - C 中具有结构的函数中的 if 语句和 for() 循环

字符串的 Java indexOf 和 lastIndexOf 的 Swift 等价物

c - 在 C 中使用结构体和指针时遇到问题

c++ - 将临时结构作为模板参数传递

swift - 在 Swift 3 中使用 "WKAudiovisualMediaTypeNone"时出错