我不确切地知道我在寻找什么,这就是为什么我要开一个新问题的原因。如果有其他问题得到解答,请将此问题标记为副本。
请理解我是IOS开发的新手,所以如果我写的东西 这不太对,请随意纠正我。
所以我的swift代码中有一个包含六个索引的数组。每个索引都有四个不同变量的值。例如,在我的QuestionBank
课程中:
var list = [Question]()
init() {
list.append(Question(text: "some Text", answerA: "answer a"), answerB: "answer b", selectedQuestionNumber: 1)
list.append(Question(text: "some Text", answerA: "answer a"), answerB: "answer b", selectedQuestionNumber: 2)
list.append(Question(text: "some Text", answerA: "answer a"), answerB: "answer b", selectedQuestionNumber: 3)
list.append(Question(text: "some Text", answerA: "answer a"), answerB: "answer b", selectedQuestionNumber: 4)
list.append(Question(text: "some Text", answerA: "answer a"), answerB: "answer b", selectedQuestionNumber: 5)
list.append(Question(text: "some Text", answerA: "answer a"), answerB: "answer b", selectedQuestionNumber: 6)
}
我添加了selectedQuestionNumber
以获得每个索引的唯一标识符。我不想使用每个索引的默认编号(allQuestions.list[questionNumber].questionText
)
所以我的问题如下:
如何使用selectedQuestionNumber
作为标识符来获取第一个索引的值?
到目前为止我得到了这个:
if allQuestions.list[questionNumber].storyNumber == 1 {
storyTextView.text = allQuestions.list[questionNumber].questionText
topButton.setTitle(allQuestions.list[questionNumber].answerA, for: .normal)
bottomButton.setTitle(allQuestions.list[questionNumber].answerB, for: .normal)
}
我评估storyNumber是否为1,但文本和答案不会被同一因素评估。我想让storyNumber评估所有内容。这意味着必须用其他内容替换[questionNumber]
并给我一些属于storyNumber 1的文本和答案。
如果您需要有关代码和未定义的变量的更多信息(至少在这里,在我的项目中定义了它们),请随时询问。
祝你好运
答案 0 :(得分:1)
您希望使用first(where: )
。这是这样做的:
let question = list.first(where: { $0.selectedQuestionNumber == 1 })
您还可以按selectedQuestionNumber
对数组进行排序:
let orderedList = list.sorted { $0.selectedQuestionNumber < $1.selectedQuestionNumber }
或者,变异版本:
list.sort { $0.selectedQuestionNumber < $1.selectedQuestionNumber }
然后您可以通过它们的数组索引访问它们。
除此之外,还有过滤器:
let question = list.filter { $0.selectedQuestionNumber == 3 }
但请注意,由于您在此上下文中使用它,结果仍然是数组。可能没有,一个或多个值保留。
答案 1 :(得分:0)
使用first(where: {$0.selectionNumber == VALUE})
确实是你想要的,如果你只想直接前进。
由于你想自己索引数组,我建议你这样做。我重写了你的Question结构来代表我的设计:
public struct Question {
let text: String
let answerA: String
let answerB: String
init(_ text: String, _ answerA: String, _ answerB: String) {
self.text = text
self.answerA = answerA
self.answerB = answerB
}
}
class Test {
var list: [Int : Question] = [:]
init() {
list[0] = Question("some text", "answer A", "Answer B")
list[1] = Question("some text", "answer A", "Answer B")
list[2] = Question("some text", "answer A", "Answer B")
list[3] = Question("some text", "answer A", "Answer B")
list[4] = Question("some text", "answer A", "Answer B")
list[5] = Question("some text", "answer A", "Answer B")
}
}
通过这种方式,您将使用可以自己编制索引的dictionary
并以与数组相同的方式获取。
这样你就不必对其进行零索引,但是你可以从15开始上升,或者你可以使用负值。