Ios 如何组织这些数据?

Ios 如何组织这些数据?,ios,arrays,swift,struct,Ios,Arrays,Swift,Struct,我有一个iOS应用程序,有50多个问题。每个问题都有: 问题 正确答案 三个错误的答案 图像名称 最初,我尝试使用一个结构(如下所示),并为每个问题创建一个常量,当用户得到该问题时,我可以调用/加载该常量: struct QuestionInfo { var question: String var correctAnswer: String var wrongAnswer_1: String? var wrongAnswer_2: String? var

我有一个iOS应用程序,有50多个问题。每个问题都有:

  • 问题
  • 正确答案
  • 三个错误的答案
  • 图像名称
  • 最初,我尝试使用一个结构(如下所示),并为每个问题创建一个常量,当用户得到该问题时,我可以调用/加载该常量:

    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]
    

    我试图根据运行效率最高的结构和正常的设计模式进行选择。

    事实上,我认为像您这样的结构没有任何问题。也许只是稍微改善一下

    struct Question {
        let question: String
        let correctAnswer: String
        let wrongAnswers: (String, String, String)
        let imageName: String
    }
    
    用法
    事实上,我认为像你这样的结构没有任何问题。也许只是稍微改善一下

    struct Question {
        let question: String
        let correctAnswer: String
        let wrongAnswers: (String, String, String)
        let imageName: String
    }
    
    用法
    使用如下所示的结构数组

    结构

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

    用法

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

    使用如下所示的结构数组

    结构

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

    用法

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

    这是个好消息,因为结构对我来说很好。然而,我发布了(评论末尾的链接),因为创建了太多变量/常量而受到批评。“这是一个非常糟糕的设计选择。你需要保留几十个变量,所有变量都指向同一类东西。”但你认为这是一个不错的设计,不会导致效率问题@DaveG:好的,我理解关于避免使用索引命名的几个变量的评论,如
    ErrorAnswer0
    ErrorAnswer1
    ErrorAnswer2
    。只需使用我在问题中发布的代码。它可以完成任务。我建议使用一个答案数组和一个int来表示正确答案的索引。@Paulw11:我发现数组的问题是,在编译时,您无法确定它确实包含了预期数量的元素。我可以包含更多的值,甚至可以是空的。从这个角度来看,我认为元组更安全。您不需要在编译时知道数组包含多少元素。你在运行时处理这个问题,然后你可以有一个问题,有4个可能的答案,2个可能的答案等等。这也使得从某种形式的持久存储(如plist或服务器)加载问题对象变得更加简单。这是个好消息,因为这个结构对我来说听起来不错。然而,我发布了(评论末尾的链接),因为创建了太多变量/常量而受到批评。“这是一个非常可怕的设计选择,你需要在所有这些变量周围保留几十个变量,以相同的方式来描述。”但是你的观点是,它是一个好的设计,不会造成效率问题@DaveG:好的,我理解关于避免使用索引命名的几个变量的评论,如
    ErrorAnswer0
    ErrorAnswer1
    ErrorAnswer2
    。只需使用我在问题中发布的代码。它可以完成任务。我建议使用一个答案数组和一个int来表示正确答案的索引。@Paulw11:我发现数组的问题是,在编译时,您无法确定它确实包含了预期数量的元素。我可以包含更多的值,甚至可以是空的。从这个角度来看,我认为元组更安全。您不需要在编译时知道数组包含多少元素。你在运行时处理这个问题,然后你可以有一个问题,有4个可能的答案,2个可能的答案等。这也使得从某种形式的持久存储(如plist或服务器)加载问题对象变得更简单。我认为你误解了对原始问题的评论;最后一段代码中的结构数组就是它的意思。您还可以创建一个plist文件来存储您的问题,并在运行时将其加载到数组中,而不必拥有所有的创建代码;最后一段代码中的结构数组就是它的意思。您还可以创建一个plist文件来存储您的问题,并在运行时将其加载到数组中,而不必拥有所有的创建代码。