Я получаю JSON от API, и большинство ключей декодируются из коробки.
Пример ответа API:
[
{ "href":"http:\/\/audiomachine.com\/",
"description":"Audiomachine",
"extended":"Music for videos",
"shared":"yes",
"toread":"no",
"tags":"creative video music"
},
{ "href": "https:\/\/www.root.cz\/clanky\/nekricte-na-disky-zvuk-i-ultrazvuk-je-muze-poskodit-nebo-zmast-cidla\/",
"description":"Nek\u0159i\u010dte na disky: zvuk i\u00a0ultrazvuk je m\u016f\u017ee po\u0161kodit nebo zm\u00e1st \u010didla - Root.cz",
"extended":"Added by Chrome Pinboard Extension",
"shared":"yes",
"toread":"no",
"tags":"root.cz ril hardware webdev"
},
{ "href": "https:\/\/www.premiumbeat.com\/blog\/10-apple-motion-tutorials-every-motion-designer-watch\/",
"description":"10 Apple Motion Tutorials Every Motion Designer Should Watch",
"extended":"For people used to working with FCPX, sometimes learning Apple Motion can be much easier than learning After Effects. While the two programs are different, there\u2019s certainly a lot of overlap in terms of functionality and creative potential. The following ten Apple Motion tutorials are great examples of just that.\r\n\r\nWhether you are someone new to Apple Motion or a seasoned veteran looking to up your skills, here are ten must watch Apple Motion tutorials.",
"shared":"yes",
"toread":"no",
"tags":"apple apple_motion video creative effects"
}
]
Я сохраняю каждый элемент в следующей структуре.
struct Link: Codable {
let href: URL
let description: String
var tags: String
}
, которая затем декодируется с чем-то вроде
URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in
guard let data = data, error == nil else { return }
do {
let decoder = JSONDecoder()
let decodedData = try decoder.decode([Link].self, from: data)
Из данных API я использую href , описание и теги . Теги немного проблематичен, потому что я хочу использовать его в коде как массив строк, но в JSON он извлекается как строка, содержащая все теги, разделенные пробелом.Так как это мой первый проект, который я использую для изучения разработки под iOS, я почти не представляю, как решить эту проблему.
Мне удалось подобраться, посчитав вычисленные свойства, так что это может быть что-то вроде
struct Link: Codable {
let href: URL
let description: String
var tags: String {
return tagsFromServer.components(separatedBy: " ")
}
}
, но у меня есть две проблемы с этим решением.
- У меня сильное чувство, это закрытие будет вызываться каждый раз, когда код доступа
.tags
.Я бы предпочел сделать это один раз при извлечении JSON, а после этого просто прочитать продукт этого. - Я абсолютно не знаю, как передать «оригинальные теги, которые я получил с сервера» /
tagsFromServer
назакрытие.
Буду признателен за заполнение пробелов в терминологии или за хороший видеоурок по этой теме.