这里我将eventDetails中元素数量的值赋给Alamofire完成处理程序中的变量x。但是,我无法在代码中的其他地方使用它。我尝试将x的值用于numberofrowsinsection,但它返回0虽然它有一个值。
Alamofire.request(some_url, method: .post, parameters: data, encoding: URLEncoding.default, headers: nil).responseJSON {
response in
let json = JSON(response.result.value)
for eves in json.arrayValue {
self.eventDetails.append(eves["EventName"].stringValue)
self.regids.append(eves["EventRegID"].stringValue)
}
self.x = self.eventDetails.count
}
答案 0 :(得分:0)
请记住,此完成处理程序闭包是异步运行的(即,在关闭后立即出现的代码之后)。你可能在它有机会被设置之前检查x
。在完成处理程序闭包中添加self.tableView.reloadData()
,以便在请求完成后让您的应用重新加载表。
Alamofire.request(some_url, method: .post, parameters: data).responseJSON { response in
let json = JSON(response.result.value)
for eves in json.arrayValue {
self.eventDetails.append(eves["EventName"].stringValue)
self.regids.append(eves["EventRegID"].stringValue)
}
self.x = self.eventDetails.count
self.tableView.reloadData()
}
答案 1 :(得分:0)
顺便说一句,与您手头的问题完全无关,您可能希望使用自定义类型来捕获这些详细信息:
struct Event {
let name: String
let regId: String
}
然后,不是将eventDetails
和regids
数组分开,而是拥有一个事件数组:
var events = [Event]()
这更准确地捕获了实际模型(您正在处理一系列事件,而不是完全不相关的名称和标识符数组)。它还支持某些功能。例如,假设您的事件按时间顺序返回,并且您希望按字母顺序对它们进行排序,如果将与单个事件关联的所有详细信息封装到自定义类型中,则在排序时,整个对象将被排序并且您不必担心如何保持这些不同的阵列同步。
无论如何,使用自定义类型时,responseJSON
可能如下所示:
Alamofire.request(some_url, method: .post, parameters: data).responseJSON { response in
let json = JSON(response.result.value)
for eves in json.arrayValue {
let event = Event(name: eves["EventName"].stringValue, regId: eves["EventRegID"].stringValue)
self.events.append(event)
}
self.tableView.reloadData()
}
我也会删除x
的使用,因为这只是另一个可能与此数组不同步的变量。只需numberOfRowsForSection
直接返回events.count
。
现在,我在没有通过编译器运行的情况下键入了上述内容,所以如果我引入了任何拼写错误,我会道歉。但我不希望您专注于我的代码片段的细节,而是基本的想法,即人们通常希望拥有自定义对象的数组,而不是完全独立于对象的各个属性的数组。