универсальная функция пользователя для определения типа экземпляра в swift

#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 по сути одинаковы.