gpt4 book ai didi

ios - 使用 JSON 对象填充 Swift 中的 TableView

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

我在这里查看了许多其他问题,但我对 Swift 还比较陌生,我很难将这些答案放入我所拥有的上下文中。

我有一个事件数据库,我想用所述事件填充 TableView 。在我的“EventTableViewController”中,我有以下功能:

func HTTPRequestListEvent() {
let serverURL = NSURL(string: "http://localhost:8888/public_php/Cake/index.php/event/listevent")
let request = NSMutableURLRequest(url:serverURL! as URL)
request.httpMethod = "POST"

//Create a task to send the post request
let task = URLSession.shared.dataTask(with: request as URLRequest) {
data, response, error in

if error != nil {
print("HTTPRequestError1=\(error)")
return
}

do {
if let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject] {
print("1")
for (_, value) in json {
if let eventItem = value as? [String:AnyObject] {
if let eventName = eventItem["EventName"] as? String {
print(eventName)
}
if let eventLocation = eventItem["EventLocation"] as? String {
print(eventLocation)
}
}
}
}
}
catch {
print("HTTPRequestError2=\(error)")
}
}
task.resume()
}

但是,我似乎无法让 JSON 序列化工作。它没有给我一个错误,甚至也没有打印出“1”。

另外,我不想说“print(eventName)”,但这就是我到目前为止所拥有的。我想做的是做类似的事情:

    cell.eventNameLabel.text = eventName

但我不确定如何在这种情况下获取单元格详细信息。

编辑:我的 JSON 已在其他地方工作,但对于单一数据 - 我已经能够登录并注册用户。

使用 postman,我从服务器获取以下 json 数据:

[{"EventName":"华丽晚会","EventLocation":"热水浴缸电影院","StartDate":"2017-12-01"},{"EventName":"精彩派对","EventLocation":"Gazeebo","StartDate":"2017-12-02"},{"EventName":"神奇事件","EventLocation":"彩虹的尽头","StartDate":"2017-02-03 "},{"EventName":"轻微垃圾聚集","EventLocation":"地下城","StartDate":"2090-01-04"}]

最佳答案

首先,第一件事。 print("1") 不起作用的原因非常简单。您正在使用 if let 来解包该值,如果该值为 null,则 if let 内的代码将被跳过。在您的代码中,只需为 if let 添加一个 else 并执行打印,就会打印出来。

现在回到你的问题。 if let 不起作用的原因是您转换 JSON 字符串的方式。从 JSON 字符串来看,顶层有一个数组。在您的代码中,您将结果转换为 [String:AnyObject],它是一个字典。所以你得到的结果为 null,因为这次转换失败。为了解决您的问题,这里是您的代码的工作示例:

let str = "[{\"EventName\":\"Magnificent soirée\",\"EventLocation\":\"Hot tub cinema\",\"StartDate\":\"2017-12-01\"},{\"EventName\":\"Splendid party\",\"EventLocation\":\"Gazeebo\",\"StartDate\":\"2017-12-02\"},{\"EventName\":\"Magical event\",\"EventLocation\":\"The end of a rainbow\",\"StartDate\":\"2017-02-03\"},{\"EventName\":\"Slightly rubbish gathering\",\"EventLocation\":\"Dungeon\",\"StartDate\":\"2090-01-04\"}]"

do {
let data = str.data(using: .utf8)
if let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [Dictionary<String, Any>] {
print("1")
for oneItemInJsonArray in json {
if let eventName = oneItemInJsonArray["EventName"] as? String {
print(eventName)
}
if let eventLocation = oneItemInJsonArray["EventLocation"] as? String {
print(eventLocation)
}
}
}else{
print("fail")
}
}
catch {
print("HTTPRequestError2=\(error)")
}

关于ios - 使用 JSON 对象填充 Swift 中的 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44640860/

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