gpt4 book ai didi

ios - 在 Swift 中将闭包传递给 addTarget

转载 作者:可可西里 更新时间:2023-11-01 01:22:50 26 4
gpt4 key购买 nike

我有一个方法可以从 api 获取电影,然后将数据加载到 UITableView 中。我想重用刷新控件的网络调用,并在 http get 请求结束时调用完成处理程序,一旦成功,它基本上会停止刷新控件。这可能吗?

func getMovies(completion: (() -> ())?) {
SVProgressHUD.show()
Alamofire.request("https://api.moviesite").responseJSON {
response in
switch response.result {
case .success(let data):
if let json = data as? NSDictionary {
self.movieResults = json["results"] as! [NSDictionary]
self.nowPlayingTableView.reloadData()
}
case .failure(let error):
print(error)
self.showNetworkError(show: true)
}

SVProgressHUD.dismiss()
if completion != nil {
completion!()
}
}
}

当我在 viewDidLoad 中使用这个方法时,我想做这样的事情:

let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(NowPlayingViewController.getMovies(refreshControl.endRefreshing)), for: .valueChanged)
nowPlayingTableView.insertSubview(refreshControl, at: 0)

但是我得到一个关于

的编译器错误

无法使用 getMovies,您是否打算改用值类型?

最佳答案

您使用 UIRefreshControl 设置的唯一 selector#selector(refreshing)#selector(refreshing(_:) ) 表示 selectorUIRefreshControl 作为参数或不带任何参数。如果你想结束刷新,那么试试这样。

let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(refreshing(_:)), for: .valueChanged)
nowPlayingTableView.insertSubview(refreshControl, at: 0)

现在用你的 Controller 添加一个 Action refreshing 并用它调用 getMovies 并在你的 getMovies 完成后调用 end Refreshing UIRefreshControl

func refreshing(_ sender: UIRefreshControl) {
self.getMovies() {
sender.end​Refreshing()
}
}

关于ios - 在 Swift 中将闭包传递给 addTarget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43133194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com