我对斯威夫特语有点陌生。因此,我需要一些关于如何将Alamofire生成的在线数据从一个视图控制器中的tableview推送到位于另一个视图控制器中的webview的一些建议。更具体地说,在JSON数据中,有各种带有标记“url”的元素。我的目标是将这些url元素与适当的tableview单元格相匹配,以便当单击单元格时,它会将用户带到新视图控制器中的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)
}
}发布于 2017-10-27 05:36:23
你可以像使用数组一样使用字典。唯一的区别是,通过下标访问字典值并不能保证结果,因此返回值的类型是可选的。
回到您的问题上,我想您希望打开另一个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。
https://stackoverflow.com/questions/46964736
复制相似问题