SwiftUI 无法将字符串传递给 KeyPath

SwiftUI Can't Pass String to KeyPath

我有一个应用程序引用了我从外部加载的大型数据集 public 站点作为逗号分隔值文件。我将数据解析为一个名为模型的数组 水点模型。缩写版本是:

struct WaterPointModel: Identifiable {

    let id = UUID()

    let STATE: String
    let COUNTY: String
    let AQWFrTo: Double
    let AQWGWSa: Double
    let AQWGWTo: Double
    //many more
}

然后我想总结(减少)数据。我的功能是:

func sumOnAttributeUSList(sumField: KeyPath<WaterPointModel,Double>) -> Double {
    return dataStore.waterPointModels.map({ [=11=][keyPath:sumField] }).reduce(0, +)
}

接下来我要调用它来构建报告:

let aqWFrTo = sumOnAttributeUSList(sumField: \.AQWFrTo)    

一切正常。但是还有其他报告我需要将字符串传递给 创建该键路径。假设我有一个查找 table,我在其中查找“abc”并获得“AQWFrTo”。我 想在循环中做这样的事情:

let abc = "AQWFrTo"
let aqWFrTo = sumOnAttributeUSList(sumField: \WaterPointModel.abc)

我无法制作此作品的任何版本。任何指导将不胜感激。

Xcode13.3.1,iOS15.4

一个简单的方法是这样的:

func toKeypath(_ str: String) -> KeyPath<WaterPointModel,Double>? {  // <-- with or without optional
    switch str {
        case "AQWFrTo": return \.AQWFrTo
        case "AQWGWSa": return \.AQWGWSa
        case "AQWGWTo": return \.AQWGWTo
        // ...
        default: return nil  // <-- or a default Keypath
    }
}

let aqWFrTo = sumOnAttributeUSList(sumField: toKeypath("AQWFrTo"))