将嵌套的完成处理程序传递到另一个 class

Passing a completion handler nested into another class

我正在开发一个使用 Swift 的图书馆。我想知道在下面的场景中有没有更好的方法可以使用,

ViewController.swift

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

上面的控制器来自示例应用程序,我在其中调用了电影库中的 public 方法。

Movie.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
}

这是怎么做到的?无论如何我可以用完成处理程序做得更好吗?

问题是您的 completionHandler 不是完成处理程序:

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

它只是一个结果对象。处理程序是一个函数:

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

现在您有一个完成处理程序,您可以使用 Result 参数调用它。