#swift #function #data-conversion
#swift #функция #преобразование данных
Вопрос:
Я пытаюсь декодировать мой ответ JSON data
из type: AnyObject?
обратно во что-то, что можно распечатать в консоли / взаимодействовать с ним.
считывание данных перед декодированием печатает projectName.GameData
Вот разбивка, данные возвращаются из ответа как тип: Any?
потому что он отправлен как
class GameData : Codable {
var isPlayerOneTurn: Bool!
var wasCreated: Bool!
var playerOne: String!
var playerTwo: String!
var board: [[Int]]!
init() {
}
}
Текущая ошибка, которую я получаю при попытке декодирования Cannot convert value of type 'GameData' to expected argument type 'Data'
код :
let decoder = JSONDecoder()
let dataTest = try? decoder.decode(GameData.self, from: data)
Мне не хватает правильного метода init() в классе GameData?
ОБНОВЛЕНИЕ: данные были изменены на тип Data
здесь: спасибо @rmaddy за комментарий, указывающий на это.
let data = data as? Data
let decoder = JSONDecoder()
let dataTest = try? decoder.decode(GameData.self, from: data!)
print("data: (String(describing: dataTest))")
строка печати по-прежнему показывает data: Optional(projectName.GameData)
Что здесь не так, что не позволяет мне просматривать значения класса GameData?
Комментарии:
1.
data
должно быть типаData
.2. Добавьте
description
метод в свойGameData
класс. КСТАТИ —GameData
вероятно, это должна быть структура, а не класс.3. совет: хотя вы НЕ должны делать ни того, ни другого, вы можете сделать
data as! Data
так, чтобы вам не нужно было этого делатьdata!
. Но вместо этого я бы поставил aguard
с ошибкой утверждения.4. @Kubee спасибо за ответ! воспользуюсь этим советом.
Ответ №1:
Строка печати, упомянутая в вопросе, была значением декодирования игрового объекта.. Это было все, что XCode распечатал — имя исходного объекта перед декодированием. Использование dataTest.myValue
работало при доступе к данным из объекта.