Так как ты новичок, я тебе помогаю. Эти вопросы задавали много раз (высока вероятность того, что вы получите повторяющийся флаг). Вот как можно избежать подобных ошибок: старайтесь не использовать принудительное развертывание (этот символ !
) где-либо без исключения, чтобы избежать этих ошибок. Вместо if let
вы можете использовать guard let
, это ваш личный выбор.
if let data = data,
let dictionary = try JSONSerialization.jsonObject(with: data, options:.mutableContainers) as? [String: Any],
let media = dictionary["media"] as? [String: Any],
let faces = media["faces"] as? [[String: Any]],
let points = faces[0]["points"] {
print(points)
}
Изменить: поскольку параметр "faces"
представляет собой массив, вам необходимо проанализировать их как Array
, а не как Dictionary
. В приведенном выше примере показано, как перейти к первому набору "points"
.
Обновление: Лучше использовать JSONDecoder
. Вот как: Создайте эту структуру вне класса:
struct Response: Codable { var media: Media }
struct Media: Codable { var faces: [Face] }
struct Face: Codable { var points: [Point] }
struct Point: Codable { }
А затем декодируйте следующим образом:
if let data = data,
let response = try JSONDecoder().decode(Response.self, from: data) {
print(response.media.faces[0].points)
}