Эта строка:
class WeatherModel: NSObject, ModelProtocol {}
вызывает ошибку.Вам лучше попытаться показать достаточно кода, чтобы воспроизвести вашу проблему.
В любом случае, у вас есть две основные проблемы.
Во-первых, это объявление let className: ModelProtocol
объявляет className
как экземплярв соответствии с протоколом ModelProtocol
.Это не объявление для типа.
Во-вторых, в Swift нет инициализатора по умолчанию.Когда вы хотите вызвать init()
для переменной типа, соответствующей протоколу, протокол должен объявить init()
.
Итак, ваш протокол должен выглядеть примерно так:
protocol ModelProtocol{
func parse<T: Decodable>(data: Data) throws -> Array<T>?
init()
}
Вам нужно добавить required
инициализатор, чтобы соответствовать ему:
class WeatherModel: NSObject, ModelProtocol {
func parse<T: Decodable>(data: Data) throws -> Array<T>? {
//...
return [/*...*/]
}
override required init() {
super.init()
}
}
И тогда вы можете написать что-то вроде этого:
init(model: String) {
self.networking = Networking()
let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String
let classType: ModelProtocol.Type = NSClassFromString("\(namespace).\(model)") as! ModelProtocol.Type
self.model = classType.init()
}