Swift получить значение из другого массива словаря с другим индексом - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть список вопросов, которые я представляю в CollectionView, с количеством элементов, основанных на количестве данных questionList, например:

 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.questionList.count
}

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
   //present the cell
}

И в моей ячейке я хочу получить значение "приз" отданные answerList, в то время как номер объекта answerList не всегда совпадает с вопросом questionList.

Мне нужно сопоставить индексный ключ в questionList с индексом в answerList, поэтому, например, я могу представить, если title = "Question2", приз2000, потому что это то же самое значение в ключевом индексе.Как мне это сделать?

Это мой пример данных:

questionList":[{"index":0,"title":"Question 1"}, 
{"index":1,"title":"Question 2"}, 
 {"index":2,"title":"Question 3"]

"answerList": [{"index":1,"prize":2000}
,{"index":2,"prize":5000}]

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Ваши модели будут выглядеть примерно так:

    struct Question: Codable {
        var index: Int
        var title: String
    }

    struct Answer: Codable {
        var index: Int
        var price: String
    }

и код:

    var answers: [Answer]?

    var question = Question(index: 0, title: "Question1")
    if let answers = answers, let chosenOne = (answers.filter{$0.index == question.index}).first {
        print(chosenOne.price)
    }
0 голосов
/ 28 ноября 2018

Я не профессионал swift, но я бы начал с метода фильтра, подобного этому, в func collectionView:

func filter(indexOfQuestionlist: IndexPath){
    answerlist.filter {$0.index == indexOfQuestionlist}
}

, и ваши данные выглядят как json, так что я предполагаю, что вы конвертируете ихкак-нибудь Swift Objects, через сериализацию или Codable?

0 голосов
/ 28 ноября 2018

Я предлагаю два ответа:

1) найти правильный ответ по значению индекса.

, например, в первой ячейке вопроса:

let question = {"index": 0, "title": "Question 1"}
let index = question["index"]

if let answerIndex = answerList.index { $0[index] == index } {
    let answer = answerList[index]
}

2)вложите ответ в вопрос, чтобы ваши данные были такими:

let questionList = [{"index":0, "title":"Question 1"}, 
{"index":1, "title": "Question 2", "prize": 2000}, 
{"index":2, "title": "Question 3", "prize": 5000]
...