我有一個應用程式參考了一個大型資料集,該資料集作為逗號分隔值檔案從外部公共站點加載。我將資料決議為一個名為 WaterPointModel 的模型陣列。一個縮寫版本是:
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({ $0[keyPath:sumField] }).reduce(0, )
}
接下來我想呼叫它來構建報告:
let aqWFrTo = sumOnAttributeUSList(sumField: \.AQWFrTo)
這一切都有效。但是,還有其他報告,我需要傳遞一個字串來創建該密鑰路徑。假設我有一個查找表,我在其中查找“abc”并獲得“AQWFrTo”。我想在回圈中做這樣的事情:
let abc = "AQWFrTo"
let aqWFrTo = sumOnAttributeUSList(sumField: \WaterPointModel.abc)
我無法制作任何版本的這項作業。任何指導將不勝感激。
Xcode 13.3.1、iOS 15.4
uj5u.com熱心網友回復:
一個簡單的方法是這樣的:
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"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/463315.html
