【问题标题】:Passing a completion handler nested into another class传递嵌套到另一个类中的完成处理程序
【发布时间】:2020-04-25 16:52:59
【问题描述】:

我正在开发一个使用 Swift 的库。我想知道在以下情况下我可以使用什么更好的方法,

ViewController.swift

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

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

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
}

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

【问题讨论】:

    标签: ios swift swift3 completionhandler


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      相关资源
      最近更新 更多