【问题标题】:Is there a way to use a let string as a key name? - swift有没有办法使用 let 字符串作为键名? - 迅速
【发布时间】:2020-07-11 06:53:21
【问题描述】:

我在选择表格单元格时创建了一个字符串,以及一个名为汽车的类:

class car{
   name:string
   color:String
   type:string

}

let itemselecionado = ""
let lista = ["name","color","type"]
let listacars = [car1,car2,car3]

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
     itemselecionado = lista[indexPath.row] // 
}

我可以将此字符串转换为类键名来过滤表吗?

例如:

listacars = listacars.filter({ $0.itemselecionado.lowercased().contains("ok") })

【问题讨论】:

    标签: ios arrays swift uitableview filter


    【解决方案1】:

    不,你不能用字符串来做,除非你使用字典而不是类。

    但是,您可以使用KeyPath 而不是String

    struct Car {
        let name: String
        let color: String
        let type: String
    }
    
    let items: [KeyPath<Car, String>] = [\.name, \.color, \.type]
    let cars = [
        Car(name: "Audi", color: "black", type: "A5"),
        Car(name: "Fiat", color: "red", type: "Uno")
    ]
    
    let row = 1 // color
    
    let selectedItem = items[row]
    let filteredCars = cars.filter { $0[keyPath: selectedItem].lowercased().contains("r") }
    print(filteredCars) // [Car(name: "Fiat", color: "red", type: "Uno")]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多