Есть ли способ использовать строку let в качестве имени ключа? - быстро - PullRequest
0 голосов
/ 30 марта 2020

У меня есть строка, созданная при выборе ячейки таблицы, и класс с именем cars:

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") })

1 Ответ

0 голосов
/ 30 марта 2020

Нет, вы не можете делать это со строками, если вы не используете словарь вместо класса.

Однако вы можете использовать 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")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...