Быстрый. Общий параметр » T » не может быть выведен

#swift #generics

Вопрос:

Я хочу создать один метод для отображения объекта. Поэтому у меня есть такой метод:

 func testDecode<T: Decodable>(from: DocumentSnapshot) -> T? {
    do {
        return try from.data(as: T.self)
    } catch {
        return nil
    }
}
 

И я использую его вот так:

 let test = testDecode(from: document.data) as? TestModel
 

но у меня есть ошибка: Generic parameter 'T' could not be inferred не могу понять, почему у меня эта ошибка, пожалуйста, дайте мне совет

Комментарии:

1. Проголосовали против сокрытия ошибки. Эта функция-всего try? лишь ключевое слово.

Ответ №1:

Вы не должны пытаться привести значение, а скорее аннотировать test , TestModel? чтобы компилятор мог определить универсальный тип T как TestModel .

 let test: TestModel? = testDecode(from: document.data)
 

Комментарии:

1. : TestModel? это то же as TestModel? самое, что . Знак вопроса просто нужно переместить для эквивалентности.

2. спасибо за ответ, но у меня та же ошибка Generic parameter 'T' could not be inferred

3. @vetaney915, пожалуйста, обновите свой вопрос с вашим определением DocumentSnapshot и, в частности, его data(as:) методом, потому что это означает, что проблема будет там внутри