Ios 如何组织这些数据?
我有一个iOS应用程序,有50多个问题。每个问题都有: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
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文件来存储您的问题,并在运行时将其加载到数组中,而不必拥有所有的创建代码。