#ios #generics
#iOS #дженерики
Вопрос:
У меня есть три класса, которые соответствуют одному и тому же типу объекта (протоколу).
class Bicycle: Vehicle {} class Car : Vehicle {} class Truck: Vehicle {} class Bus : Vehicle {}
У меня есть массив, содержащий объекты вышеуказанных классов, такие как
let vehicle1 = Car() let vehicle2 = Bicycle() let vehicle3 = Truck() let vehicle4 = Car() let vehicle5 = Bus() let listOfVehicles = [vehicle1, vehicle2, vehicle3, vehicle4, vehicle5]
Теперь мне нужен массив, который сообщит мне индекс переданного параметра.
func getFirstIndexlt;T: Vehiclegt;(for targetObject: T) -gt; Int { guard let index = listOfVehicles.firstIndex(where: { $0 is targetObject.Type }) else { return -1 } return index }
Если я позвоню getFirstIndex(for: vehicle3)
, мне нужно получить 2 и
Если я позвоню getFirstIndex(for: vehicle4)
, мне нужно получить 0, потому что тип vehicle4 и тип vehicle1 одинаковы, что и есть Car
.
Но я получаю ошибку компиляции «Тип выражения неоднозначен без дополнительного контекста».
У кого-нибудь есть какие-нибудь догадки.
Ответ №1:
Просто замените targetObject.Type
на T
Комментарии:
1. Можете ли вы сказать мне, почему targetObject. Тип не работает, потому что говорит targetObject. Тип и T по сути одинаковы.