Вопрос: Я пытаюсь декодировать мой JSON, который у некоторых JSON будет иметь случайную строку, а у некоторых будет жестко закодированная строка. Когда жестко закодированная строка является одной из приведенных ниже, я хотел бы отображать различные ячейки UICollectionView. У меня возникли проблемы с попыткой разобрать мой JSON, если это жестко закодированная строка и возможность отображать с ней другой UICollectionViewCell. Любая помощь в этом была бы замечательной. Это может быть новичок, но я попытался решить эту проблему на прошлой неделе, и у меня возникли проблемы с попыткой сделать это. Любая помощь по этому поводу будет высоко оценена.
** Hardcoded Strings that could be one or the other:**
key: --> This string could be "breaking" or "normal" or "new"
item: --> This string could be "placement" or "slot" or "shared"
verb: --> This string could be "shared" or "posted"** NOT hardcoded strings, which the string comes in randomly**
heading: --> This string is a random string
type: --> This string is a random string
Вот некоторые из моих JSON, поэтому вы можете получить пример того, что я пытаюсь сделать:
{
slots: [
{
key: "breaking",
item: "placement",
heading: "Random String Text",
type: "Random String Text",
via: "Random",
verb: "shared"
sort_order: 0
},
{
key: "breaking",
item: "placement",
heading: "Random String Text",
type: "Random String Text",
via: "Random",
verb: "posted"
sort_order: 1
},
{
key: "event",
item: "combine",
heading: "Random String Text",
type: "Random String Text",
via: "Random",
verb: "posted"
sort_order: 2
},
}
Это то, что у меня есть до сих пор для моей модели:
struct MyModel: Decodable {
var key: String?
var item: String?
var heading: String?
var type: String?
var via: String?
var verb: String?
}
Вот пример, который мне помог Дмитрий Серов.
pre>Вот еще код, который мне помог Дмитрий Серов.
func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let model = ... // retrieve your model object here
if model.verb == .shared {
// Pass the pertinent identifier
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:...)
return cell
else {
....
}
}
Проблема, когда я пытаюсь сделать это, просит меня ввести формат ниже которого я не уверен, как это сделать, и я пытаюсь разобрать еще несколько ключей.
struct MyModel { // Type names should use pascal case in Swift
var verb: State?
....
enum State {
case shared
case posted
}
}// Decode your enums from strings
extension MyModel.State: Decodable {
enum CodingKeys: String, CodingKey {
case shared
case posted
}
}
так я бы расшифровал ваш json, используя codable:
Для сравнения с жестко закодированными строками создайте перечисление:
используйте его следующим образом: