Передача обработчика завершения, вложенного в другой класс - PullRequest
0 голосов
/ 08 января 2020

Я работаю над библиотекой, где использую Swift. Я хотел бы знать, есть ли лучший подход, который я могу использовать в следующем сценарии,

ViewController.swift

Movie.searchMovie(name: “AVENGERS”, completionHandler: (Result<[MovieInfo],Error>))

Вышеуказанный контроллер взят из примера приложения, где Я вызываю метод publi c в библиотеке Mov ie.

Mov ie .swift

public class Movie: NSObject {
        public class func searchMovie(name: String, completionHandler: (Result<[MovieInfo],Error>)) {
          Records.sharedInstance.searchMovieWithName(name: name, completionBlock: { (data, error) in
            guard data != nil  else {
                completionBlock(Result.failure(error ?? “ERROR” as! Error))
            }
            guard let list = data as? [Item] else {
                completionBlock(Result.failure(error ?? "ERROR" as! Error))
            }
            completionBlock(Result.success(list))
        })
        }
}

и

Records.swift

func searchMovieWithName(name: String, completionHandler: (Result<[MovieInfo],Error>)) {
    //Implementation to search
}

Так ли это сделано? Можно ли как-нибудь лучше справиться с обработчиками завершения?

1 Ответ

3 голосов
/ 08 января 2020

Проблема в том, что ваш completionHandler не является обработчиком завершения:

public class func searchMovie(
    name: String, completionHandler: (Result<[MovieInfo],Error>))

Это просто объект Result. Обработчик - это функция:

public class func searchMovie(
    name: String, completionHandler: (Result<[MovieInfo],Error>) -> Void)

Теперь у вас есть обработчик завершения, который можно вызвать с помощью параметра Result.

...