Нет, вы не можете делать это со строками, если вы не используете словарь вместо класса.
Однако вы можете использовать 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")]