gpt4 book ai didi

swift - 如何从 Alarmofire 和弹出窗口中获取表格格式的 JSON 值?

转载 作者:行者123 更新时间:2023-11-30 10:51:07 27 4
gpt4 key购买 nike

我想从 swift 中的 API 获取值并在 Controller 中显示响应。我已经创建了该表,并且正在使用 Alarmofire 从 API 获取响应。我的问题是如何使用 Alarmofire 的成功响应并在数组中显示。我的代码在这里:

 class NotificationHistory : UIViewController, UITableViewDelegate,UITableViewDataSource {

let urlStringChecking = "http://www.XXXXXXXX.com/uhf/getnotification.php"

func GetNotificationHistory(completionHandler: @escaping (AnyObject?, NSError?) -> ()) {
getNotifiction(completionHandler: completionHandler)
}

func getNotifiction(completionHandler: @escaping (AnyObject?, NSError?) -> ()){
Alamofire.request(urlStringChecking,method: .get)
.responseJSON{ response in
switch response.result{
case .success:
let list = response.result.value;
completionHandler(list as AnyObject, nil)
case .failure( _):
print(response.result.error as Any)
}
}
}


let list = self.GetNotificationHistory(); // If I get success list here then my problem is solved but I am getting an error.

错误:“(NotificationHistory) -> () -> (NotificationHistory)”类型的值没有成员“列表”

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let reuseIdentifier = "NotificationCell"
var cell:UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) as UITableViewCell?
if (cell == nil) {
cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: reuseIdentifier)
}
cell?.textLabel?.numberOfLines = 0
cell!.textLabel?.text = list[indexPath.row]
cell!.detailTextLabel?.text = list[indexPath.row]
return cell!
}


override func viewDidLoad(){
super.viewDidLoad()
print("Notification History Loaded")
}

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

我对 Swift 很陌生。谢谢

最佳答案

要处理 json 数据,请使用 SwiftyJSON 使用 cocoapods 安装此第三方库

首先将您的list声明为NotificationHistory类中的变量

var list = [[String: AnyObject]]()

将此代码添加到您的完成处理程序 getNotifiction 现在您的代码如下所示

func getNotifiction(completionHandler: @escaping (AnyObject?, NSError?) -> ()){
Alamofire.request(urlStringChecking,method: .get)
.responseJSON{ response in
switch response.result{
case .success:
if ((response.result.value) != nil){
let jsonData = JSON(response.result.value!)

if let mydata = jsonData["list"].arrayObject {
self.list = mydata as! [[String: AnyObject]]
}
self.tableView.reloadData()

completionHandler(self.list, nil)
}
case .failure( _):
print(response.result.error as Any)
}
}
}

要调用此函数,请在 viewDidLoad() 中写入 self.GetNotificationHistory()

这次我们在 list 变量中拥有正确的数据,现在是时候在 tableview 中实现新代码了

此处无需更改

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

需要对代码进行一些更改

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let reuseIdentifier = "NotificationCell"

let newListValue = list[indexPath.row] // assign new values in diff variable

var cell:UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) as UITableViewCell?
if (cell == nil) {
cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: reuseIdentifier)
}
cell?.textLabel?.numberOfLines = 0
cell!.textLabel?.text = newListValue[indexPath.row] as? String
cell!.detailTextLabel?.text = newListValue[indexPath.row] as? String
return cell!
}

response.result.value 包含简单数组,将其视为 JSON,我们可以将其用作

response.result.value 为? [[字符串:字符串]]

或者你可以使用 SwiftyJSON

:D

关于swift - 如何从 Alarmofire 和弹出窗口中获取表格格式的 JSON 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515069/

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