gpt4 book ai didi

swift - 如何将Alamofire生成的数据从tableview推送到webview

转载 作者:行者123 更新时间:2023-11-30 12:03:12 24 4
gpt4 key购买 nike

我对 Swift 语言有点陌生。因此,我需要一些关于如何将 Alamofire 生成的在线数据从一个 View Controller 中的 TableView 推送到位于不同 View Controller 中的 Web View 的建议。更具体地说,在 JSON 数据中,有多种带有标签“url”的元素。我的目标是将这些 url 元素与适当的 tableview 单元格相匹配,这样当单击该单元格时,它会将用户带到新 View Controller 中的 URL。虽然我了解这如何与数组一起使用,但我使用的 JSON 数据是字典的数据。作为返回,我已经摆弄了一段时间,在网上搜索可能存在的任何教程。作为引用,我在这篇文章中包含了我的代码。任何有关此问题的信息将不胜感激。

class TableViewController: UITableViewController {
var responseArray = [[String:Any]]()
var mySong = 0


override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request("https://rss.itunes.apple.com/api/v1/us/apple-music/top-songs/all/10/explicit.json").responseJSON { response in
if let json = response.result.value as? [String:Any],
let feed = json["feed"] as? [String:Any],
let results = feed["results"] as? [[String:Any]] {
print(results)
self.responseArray = results
self.tableView.reloadData()
}
}
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return responseArray.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "top10", for: indexPath)
let song = responseArray[indexPath.row]
cell.textLabel?.text = song["name"] as? String
cell.detailTextLabel?.text = song["artistName"] as? String
return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
mySong = indexPath.row
performSegue(withIdentifier: "iTunes", sender: self)
}
}

最佳答案

您可以像使用数组一样使用字典。唯一的区别是通过下标访问字典值并不能保证结果,因此返回值的类型是可选的。

回到你的问题,我猜你希望打开另一个 ViewController,其中包含一个导航到 URL 的 WebView。此 URL 由导航到此处之前单击的单元格确定。

我研究了 API,因为您没有提到,我会假设您希望加载根据响应中的 artistUrl 键给出的网页。

只需将以下代码添加到 didSelectRowAt 方法中即可:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

// safely unwrap artistUrl
// init WebViewController
// set url for WebViewController
if let artistUrl = responseArray[indexPath.row]["artistUrl"], let viewController = storyboard?.instantiateViewController(withIdentifier: "WebViewController") as? WebViewController {
viewController.url = artistUrl
present(viewController, animated: true, completion: nil)
}
}

创建一个 WebViewController,如果您已经有,只需稍微修改一下代码即可。

class WebViewController: UIViewController {

@IBOutlet weak var webView: UIWebView!

var url: String?

override func viewDidLoad() {
super.viewDidLoad()

// safely unwrap url, then convert it to URL
if let url = url, let urlForRequest = URL(string: url) {
let request = URLRequest(url: urlForRequest)
webView.loadRequest(request)
}
}
}

最后一件事,对于这个 API,我注意到所有 URL 都是 HTTPS。有时,如果您使用非 HTTPS,则需要在 plist 中将 AllowArbitraryLoads 设置为 YES。

关于swift - 如何将Alamofire生成的数据从tableview推送到webview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46964736/

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