Swift generics - не может явно специализировать функцию generi c - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь вызвать обобщенную c функцию, и я получаю эту ошибку:

Не могу явно специализировать обобщенную c функцию

Мой код :

public func parse<T: Codable>(request: HTTPRequestProtocol,
                              completion: @escaping (T?) -> Void) {
          ///....
}

//

parser.parse<Person>(request: request, onSuccess: { (codable)  in
         //Error: Cannot explicitly specialize a generic function
}

Как это исправить? Спасибо

1 Ответ

2 голосов
/ 01 мая 2020

В Swift существует правило, которое вы не должны явно указывать (используя <> s), каковы параметры generi c метода generi c. Вы должны дать подсказку механизму вывода типов, чтобы it вычислил параметры generi c. В этом случае вы можете аннотировать тип параметра замыкания, чтобы замыкание имело тип (Person) -> Void. С помощью этой информации компилятор может определить тип T out.

parser.parse(request: request, onSuccess: { (codable: Person)  in ... }

В других случаях вам может потребоваться ввести дополнительный параметр типа T.Type. Например, если ваша функция принимает только параметр типа и не имеет параметров значения:

func foo<T>() { ... }

В этом случае вам необходимо добавить дополнительный параметр:

func foo<T>(_ type: T.Type) { ... }

, чтобы Вы можете использовать его как:

foo(Person.self)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...