Как я могу «привести» тип к типу, который соответствует протоколу? - PullRequest
0 голосов
/ 12 марта 2020

Если у меня есть универсальная c функция, для которой установлен тип протокола, такой как

func decodeDecodable<DataModel: Decodable>(ofType dataModelType: DataModel.Type, from data: Data) throws -> DataModel {
  return try JSONDecoder().decode(dataModelType, from: data)
}

, как я могу вызвать ее из универсального c типа, который может или может соответствовать к протоколу?

// The generic DataModel can be anything
func decode<DataModel>(ofType dataModelType: DataModel.Type, from data: Data) throws -> DataModel {
  if let decodableType = dataModelType as? Decodable { // <--- what would this be?
    return try decodeDecodable(ofType: decodableType, from: data)
  } else {
    ...
  }
}

1 Ответ

0 голосов
/ 12 марта 2020

этот подход должен работать

 if let decodableType = dataModelType.self as? Decodable.Type {
        //  conform Protocol
    } else {
    //
    }

или

if dataModelType.self is Decodable.Type {
    //  conform Protocol
} else {
//
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...