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 

但请注意,由于您在此上下文中使用它,结果仍将是一个数组。可能没有、一个或多个剩余值。

【讨论】:

您的第一个示例返回一个可选结果,因此我将使用 ifguard 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

如果 ref 不再存在,Swift -Firebase 如何触发 TransactionResult.abort()

存在登录页面时,iOS swift 可访问性应该失败

如何在 Swift 4 ios 中编码 json 数组

iOS二次发育(swift)枚举

Firestore 覆盖 iOS Swift 中已存在的数据