【发布时间】:2023-03-06 22:26:01
【问题描述】:
我已经被这个应用程序开发问题困扰了很长一段时间,在查看了无数指南、教程和示例之后,我决定最好的方法是自己构建我的代码,在适当的情况下使用各种 Alamofire/SwiftyJSON 示例.
我正在尝试创建一个显示游戏服务器表及其状态(名称、在线玩家等)的应用程序。我有一个基于 php 的 API 脚本,它能够检查这些信息并以 JSON 格式返回它 - 一个没有子字典的单嵌套字典。
为了读取这些数据,我创建了一个基于 UITableViewController 的 Swift 文件,其中包括调用此函数:
private func loadServers() {
let server1 = serverInfo(endpoint: "https://example.com/api/serverInfo.php?host=555.555.555.55&port=5555")
servers += [server1]
}
最终,这会将它添加到我的服务器阵列中,最好是添加到表格中。但是,我的问题存在于serverInfo 文件的初始化中。我已经设置了文件来存储我想要的数据,如下所示:
//MARK: Properties
var name: String?
var map: String?
var game: String?
var game_desc: String?
var players: Int?
var maxPlayers: Int?
//MARK: Types
struct PropertyKey {
static let name = "name"
static let map = "map"
static let game = "game"
static let game_desc = "game desc"
static let players = "players"
static let maxPlayers = "maxPlayers"
}
我最终使用 Alamofire 和 SwiftyJSON 使用以下代码初始化 serverInfo
init(endpoint:String) {
Alamofire.request(endpoint)
.responseJSON { response in
guard response.result.isSuccess else {
// handle failure
return
}
if let value = response.result.value {
let info = JSON(value)
self.name = info["name"].stringValue
self.map = info["map"].stringValue
self.game = info["game"].stringValue
self.game_desc = info["description"].stringValue
self.players = info["players"].int
self.maxPlayers = info["maxplayers"].int
}
}
}
但是,我收到一条错误消息,显示为 'self' captured by a closure before all members were initialized。我感觉这与我的各个字段的初始化发生在可能失败的 API 请求中这一事实有关,但我不完全确定执行此类任务的最佳方法。
感谢您花时间阅读我的问题!
【问题讨论】:
标签: swift xcode swift3 alamofire swifty-json