【问题标题】:How do I organize this data?我如何组织这些数据?
【发布时间】:2016-07-10 23:57:07
【问题描述】:

我有一个包含 50 多个问题的 iOS 应用。每个问题都有:

  1. 一个问题
  2. 正确答案
  3. 三个错误答案
  4. 图像名称

最初我尝试使用结构(如下所示)并为每个问题创建一个常量,当用户收到该问题时我可以调用/加载:

struct QuestionInfo {
    var question: String
    var correctAnswer: String
    var wrongAnswer_1: String?
    var wrongAnswer_2: String?
    var wrongAnswer_3: String?
    var imageName: String
}

但是,有人告诉我这是一个愚蠢的想法,我应该使用数组。我知道数组是用于这种类型的东西,但是我如何保持它的组织呢?

看来我会有六个数组:

let question = ["Is Mars a planet?", "Is Spain in Africa?", "+50 more"]
let correctAnswer = ["Yes", "No", "+50 more"]
//+Four more arrays

每个数组将包含 50 多个项目,每个问题将同时出现在六个不同的列表中,这让我很难保持井井有条。我应该为每个问题创建一个数组/结构,然后创建一个数组/结构数组吗?

let questionPackage = QuestionInfo(
        question: "Is Mars a planet?",
        correctAnswer: "Yes",
        wrongAnswer_1: "No",
        wrongAnswer_2: "No one knows.",
        wrongAnswer_3: "It's a candy bar."
        imageName: "MarsPhoto",
    )
let questionPackage2  = QuestionInfo(
        question: "Is Spain in Africa?",
        correctAnswer: "No",
        wrongAnswer_1: "Yes",
        wrongAnswer_2: "It's up for debate",
        wrongAnswer_3: "Duh, it's in South America."
        imageName: "SpanishFlag",
    )

//Array of structs
let array = [questionPackage, questionPackage2, etc]

我正在尝试根据最有效的运行方式和正常的设计模式进行选择。

【问题讨论】:

  • 我认为您误解了对原始问题的评论;你的最后一个代码块中的结构数组是什么意思。您还可以创建一个 plist 文件来存储您的问题并在运行时将其加载到数组中,而不必拥有所有这些创建代码。

标签: ios arrays swift struct


【解决方案1】:

实际上,我认为像您这样的结构没有任何问题。也许只是略有改善

struct Question {
    let question: String
    let correctAnswer: String
    let wrongAnswers: (String, String, String)
    let imageName: String
}

用法

let question = Question(
    question: "First captain of the Enterprise?",
    correctAnswer: "Pike",
    wrongAnswers: ("Kirk", "Picard", "Archer"),
    imageName: "Enterprise"
)

print(question.question)
print(question.correctAnswer)
print(question.wrongAnswers.0)
print(question.wrongAnswers.1)
print(question.wrongAnswers.2)

【讨论】:

  • 嗯,这是个好消息,因为这个结构对我来说听起来不错。然而,我发布了(评论末尾的链接)并因创建如此多的变量/常量而受到批评。 “这是一个非常糟糕的设计选择。你需要保留数十个变量,所有变量都指向同一种事物。”但是您的观点是它的设计还可以,不会导致效率问题? stackoverflow.com/questions/38285406/struct-not-used
  • @DaveG:好的,我理解关于避免使用wrongAnswer0、wrongAnswer1、wrongAnswer2 等索引命名的几个变量的评论。只需使用我发布到我的问题中的代码即可。它会完成这项工作。
  • 我建议也许是一个答案数组和一个表示正确答案索引的 int。
  • @Paulw11:我在数组中看到的问题是,您无法在编译时确定它确实包含预期数量的元素。我可以包含更多的值,甚至是空的。从这个角度来看,我认为元组更安全。
  • 您不需要在编译时知道数组包含多少元素。您在运行时处理此问题,然后您可以有 4 个可能的答案、2 个可能的答案等的问题。它还使得从某种形式的持久性存储(例如 plist)或服务器加载问题对象变得更加简单。
【解决方案2】:

使用如下结构数组

结构

struct Question {
var q: String
var a: String
var wa: (String, String, String)
}

数组

let array = [Question(q: "q", a: "a", wa: ("wa", "wa", "wa")), Question(q: "q", a: "a", wa: ("wa", "wa", "wa"))]

用法

print(array[0].q)
print(array[0].a)
print(array[0].wa)

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多