我已经被这个应用程序开发问题困扰了很长一段时间,在查看了无数的指南,教程和示例之后,我决定最好的方法是自己构建我的代码,在适当的地方使用各种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"
}
我最终使用以下代码初始化serverInfo
,使用Alamofire和SwiftyJSON
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请求中这一事实有关,但我不完全确定执行此类任务的最佳方式。
感谢您抽出时间阅读我的问题!
答案 0 :(得分:0)
在调用 在这种情况下就足够了,因为您的所有 HTH super.init()
并捕获Alamofire
之前,您需要调用self
,否则无法知道任何继承状态是否已初始化。< / p>
var
都具有可选类型,并且已隐式初始化为nil
。但是,如果您的var
具有非可选类型,则它也需要初始化为某个值,例如类似的东西:var myInt : Int = 0