Я был озадачен этим вопросом о разработке приложения уже довольно долгое время, и после просмотра бесчисленных руководств, руководств и примеров я решил, что лучшим путем было бы создать свой код самостоятельно, используя различные примеры Alamofire / SwiftyJSON, где это необходимо.
Я пытаюсь создать приложение, которое отображает таблицу игровых серверов и их статусы (имя, игроки в сети и т. Д.). У меня есть скрипт API на основе php, который может проверять эту информацию и возвращать ее в формате JSON - одноуровневый словарь без дополнительных словарей.
Чтобы прочитать эти данные, я создал файл Swift на основе UITableViewController
, который среди прочего вызывает эту функцию:
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, который может завершиться ошибкой, но я не совсем уверен, как лучше всего выполнить такую задачу.
Спасибо, что уделили время чтению моего выпуска!