IOS开发(Swift):如果value存在,则取当前数组索引的值
Posted
技术标签:
【中文标题】IOS开发(Swift):如果value存在,则取当前数组索引的值【英文标题】:IOS Development (Swift): If value exists, take the values of the current array index 【发布时间】:2018-03-22 12:08:49 【问题描述】:我不知道我在寻找什么,这就是我提出一个新问题的原因。如果还有其他问题得到解答,请将此问题标记为重复。
请理解我是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 的文本和答案。
如果您需要有关代码和未定义变量的更多信息(至少在这里,在我的项目中它们已定义),请随时提出。
最好的问候
【问题讨论】:
是first(where:)
你在找什么? – 可能与Find an object in array? 重复
【参考方案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
但请注意,由于您在此上下文中使用它,结果仍将是一个数组。可能没有、一个或多个剩余值。
【讨论】:
您的第一个示例返回一个可选结果,因此我将使用if
或 guard
if let question = list.first(where: $0.selectedQuestionNumber == 1) ... else /* not found */
【参考方案2】:
如果您只想直奔前行,那么使用first(where: $0.selectionNumber == VALUE)
确实是您正在寻找的。p>
由于您想自己索引数组,我建议您这样做。我重写了您的 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 开始并向上,或者如果您愿意,也可以使用负值。
【讨论】:
以上是关于IOS开发(Swift):如果value存在,则取当前数组索引的值的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 如何检查现有的 Core Data Store iOS