Это связано с моим предыдущим вопросом. Спасибо тем, кто мне помогает. Я попытался загрузить свое приложение, и не только мой ListView пуст, когда я запускаю его на симуляторе, но также я получаю ошибку, пытаясь проанализировать мой json. Я использовал методы из моего предыдущего вопроса, и список только с именами работал хорошо. Однако, когда я использовал NavigationView и NavigationLink, мои списки внезапно исчезают при запуске на симуляторе. Моя цель - создать список языков с каждой строкой, содержащей предложения в качестве деталей. Вот коды ( Edit, код @ nuke1010 работает, но я столкнулся с другой проблемой )
1. Код, который я пытаюсь запустить
// MARK: - WelcomeDetailElement
// MARK: - WelcomeDetailElement
struct WelcomeDetailElement: Codable, Identifiable {
let name: String
let id: Int
let sentence: [Sentence]
}
// MARK: - Sentence
struct Sentence: Hashable, Codable {
let data: String
let aux: String?
let pron: String?
}
struct ContentView: View {
@State var result : [WelcomeDetailElement] = [WelcomeDetailElement]()
var body: some View{
NavigationView{
List{
ForEach(result){ lang in
NavigationLink(destination: DetailView(sentence: lang.sentence)){
Text(lang.name)
}
}
}
}
.onAppear(perform: parseJson)
}
func parseJson() {
if let url = Bundle.main.url(forResource: "twelveData", withExtension: "json"){
if let data = try? Data(contentsOf: url){
let jsondecoder = JSONDecoder()
do{
let result = try jsondecoder.decode([WelcomeDetailElement].self, from: data)
self.result = result
}
catch {
print("error trying parse json")
}
}
}
}
}
struct DetailView: View {
var sentence: [Sentence]
var body: some View {
List{
ForEach(self.getArray(self.sentence[0]), id: \.self) {
Text($0)
}
}
}
func getArray(_ seq: Sentence) -> [String] {
let list = Mirror(reflecting: seq).children
var arr = [String]()
for set in list {
if let val = set.value as? String {
arr.append(val)
}
}
return arr
}
}
2. Фрагмент файла JSON
[
{
"name": "English",
"id": 1,
"sentence": [
{"data" : "I eat the apple"},
{"data" : "It is John's apple"},
{"data" : "I give John the apple"},
{"data" : "We give him the apple"},
{"data" : "He gives it to John"},
{"data" : "She gives it to him"},
{"data" : "Is the apple red?"},
{"data" : "The apples are red"},
{"data" : "I must give it to him"},
{"data" : "I want to give it to her"},
{"data" : "I'm going to know tomorrow"},
{"data" : "I can't eat the apple"}
]
},
{
"name": "Mandarin",
"id": 2,
"sentence": [
{"data" : "我吃的苹果",
"aux" : "我吃的蘋果",
"pron" : "Wǒ chī de píngguǒ"},
{"data" : "之是约翰的苹果",
"aux" : "之是約翰的蘋果",
"pron" : "Zhī shì Yuēhàn de píngguǒ"},
{"data" : "我给约翰的苹果",
"aux" : "我給約翰的蘋果",
"pron" : "Wǒ gěi Yuēhàn de píngguǒ"},
{"data" : "我们给约翰的苹果",
"aux" : "我們給約翰的蘋果",
"pron" : "Wǒ men gěi Yuēhàn de píngguǒ"},
{"data" : "他把它交给约翰",
"aux" : "他把它交給約翰",
"pron" : "Tā bǎ tā jiāo gěi Yuēhàn"},
{"data" : "她给了它",
"aux" : "她給了它",
"pron" : "Tā gěi le tā"},
{"data" : "苹果是红色的吗?",
"aux" : "蘋果是紅色的嗎?",
"pron" : "Píngguǒ shì hóngsè de ma?"},
{"data" : "苹果是红色的",
"aux" : "苹果是红色的",
"pron" : "Píngguǒ shì hóngsè de"},
{"data" : "我必须给他",
"aux" : "我必須給他",
"pron" : "Wǒ bìxū gěi tā"},
{"data" : "我想给他",
"aux" : "我想給他",
"pron" : "Wǒ xiǎng gěi tā"},
{"data" : "我明天要知道",
"aux" : "我明天要知道",
"pron" : "Wǒ míngtiān yào zhīdào"},
{"data" : "我不吃的苹果",
"aux" : "我不吃的蘋果",
"pron" : "Wǒ bù chī de píngguǒ"}
]
},
{
"name": "French",
"id": 3,
"sentence": [
{"data" : "Je mange la pomme"},
{"data" : "C’est la pomme de John"},
{"data" : "Je donne la pomme à John"},
{"data" : "On lui donne la pomme"},
{"data" : "Il la donne à John"},
{"data" : "Elle la lui donne"},
{"data" : "Est-ce que la pomme est rouge? or Elle est rouge, la pomme?"},
{"data" : "Les pommes est rouges"},
{"data" : "Je dois la lui donner"},
{"data" : "Je veux la lui donner"},
{"data" : "Je le saurai demain"},
{"data" : "Je ne peux pas manger la pomme"}
]
},
{
"name": "German",
"id": 4,
"sentence": [
{"data" : "Ich esse den Apfel"},
{"data" : "Es ist Johns Apfel"},
{"data" : "Ich gebe John den Apfel"},
{"data" : "Wir geben ihm den Apfel"},
{"data" : "Er gibt ihn John"},
{"data" : "Sie gibt ihn ihm"},
{"data" : "Ist der Apfel rot?"},
{"data" : "Die Äpfel sind rot"},
{"data" : "Ich muss ihn ihm geben"},
{"data" : "Ich will ihn ihr geben"},
{"data" : "Ich werde es morgen wissen"},
{"data" : "Ich kann den Apfel nicht essen"}
]
},
{
"name": "Hindi",
"id": 8,
"sentence": [
{"data" : "मैं सेब खा सकता/सकती*",
"aux" : "Main seb khaa sakata/sakti*"},
{"data" : "यह सेब जॉन का है",
"aux" : "Yeh seb John ka hai"},
{"data" : "मैं जॉन को सेब देता/देती* हूं",
"aux" : "Main John ko seb deta/deti* hoon"},
{"data" : "हम उसे सेब देते हैं",
"aux" : "Hum usse seb dete hain"},
{"data" : "वह जॉन वह वह देता है",
"aux" : "Voh ise jon ko data hai"},
{"data" : "वह इसे उसको देती है",
"aux" : "Voh ise usko deti hai"},
{"data" : "क्या सेब लाल है?",
"aux" : "Kya seb laal hai?"},
{"data" : "सेब लाल हैं",
"aux" : "Seb laal hain"},
{"data" : "मुझे इसे उसको देना चाहिए",
"aux" : "Mujhe ise usko data chaahie"},
{"data" : "मैं इसे उसको देना चाहता/चाहती* हूँ",
"aux" : "Main usse voh dena chahta/chahti* hoon"},
{"data" : "मैं कल जानने वाला/वाली* हूँ",
"aux" : "Main ise usko data vaalaa/vaali* hun"},
{"data" : "मैं सेब नहीं खा सकता/सकती*",
"aux" : "Main seb nahin kha sakata/sakti*"}
]
}
]
3. Результат моего DetailView показывает только первый объект в массиве предложений Показывает только первый объект