Выражение
for movie in jsonData.results {
// this is the line an error appear in movie(fromJSON: movie)
if let movie = movie(fromJSON: movie) {
items.append(movie)
}
}
использует три (!) Разных movie
переменных. Это сбивает компилятор с толку. Переименуйте метод, например,
private static func createMovie(fromJSON movie: Movie) -> Movie? { ...
и
if let movie = createMovie(fromJSON: movie) {
items.append(movie)
}
Кстати, большая часть вашего кода избыточна. И никогда не возвращайте бессмысленную пользовательскую ошибку в контексте Decoding
, возвращайте реальный DecodingError
.
Фактически вы можете заменить весь свой код этим
static func movies(fromJSON data: Data) -> Result<[Movie], Error> {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
return Result{ try decoder.decode(MovieItem.self, from: data).results }
}