如何快速初始化我的数组

Posted

技术标签:

【中文标题】如何快速初始化我的数组【英文标题】:How to init my array in swift 【发布时间】:2016-10-05 14:35:32 【问题描述】:

我有我想要制作的问答应用程序的代码。它应该从数组中询问一个随机问题。 我的代码在操场上工作,但是当我把它放到一个 xcode 项目中时,它告诉我:

不能在属性初始化器中使用实例成员“Kat1”;属性初始化器在“self”可用之前运行

我是编码应用程序和 swift 的新手,我不知道如何以正确的方式初始化数组。

这是我使用的代码:

var Kat1: [(question: String, answer: String)] =
    [
        ("What is the capital of Alabama?", "Montgomery"),
        ("What is the capital of Alaska?", "Juneau"),
        ("What is the capital of Test?", "Test Town")
]

var antal = (Kat1.count)
var randomtal = Int(arc4random_uniform(UInt32(antal)))

print(Kat1[randomtal].question)
print(Kat1[randomtal].answer)`

我做错了什么?

【问题讨论】:

我相信你需要把它放在一个函数或 viewDidLoad() 中 请记住,arc4Random 并不是真正随机的,您可能会一遍又一遍地得到相同的数字。 @Joakim 不,“rand”是伪随机的,但“arc4random_uniform”是随机的。 Morten 会得到随机数,但他可能会一遍又一遍地回答同样的问题。 for index in 1...3 let random = Int(arc4random_uniform(UInt32(Int(3)))) print(random) //结果为:0 2 0 我会有更多的问题,所以我猜同样的问题两次的机会会更少。 【参考方案1】:

把你的代码放在一个函数中......

   override func viewDidLoad() 
    super.viewDidLoad()

var Kat1: [(question: String, answer: String)] =
[
    ("What is the capital of Alabama?", "Montgomery"),
    ("What is the capital of Alaska?", "Juneau"),
    ("What is the capital of Test?", "Test Town")
]

var antal = (Kat1.count)
var randomtal = Int(arc4random_uniform(UInt32(antal)))

print(Kat1[randomtal].question)
print(Kat1[randomtal].answer)`

【讨论】:

很好...这行得通..你能告诉我为什么它需要在那里吗? 嗯好的,看这里:developer.apple.com/library/content/documentation/Swift/…【参考方案2】:

您可能希望将问题和答案打包成一个结构,该结构可以容纳所有问题并根据要求提供个别问题。这将允许您将存储问题的代码和呈现问题的代码分开。

struct Quiz 
    var kat1: [(question: String, answer: String)] =
        [("What is the capital of Alabama?", "Montgomery"),
         ("What is the capital of Alaska?", "Juneau"),
         ("What is the capital of Test?", "Test Town")]

    func randomQuestion() -> (question: String, answer: String) 
        let randomtal = Int(arc4random_uniform(UInt32(kat1.count)))
        return kat1[randomtal]
    


let quiz = Quiz()
let qa   = quiz.randomQuestion()
print(qa.question)
print(qa.answer)

【讨论】:

这仍然给出同样的错误。这是否也需要在 viewDidLoad() 内?不能在属性初始化程序中使用实例成员“测验”;属性初始化程序在“self”可用之前运行以及如何将 qa.question 和 qa.answer 放在情节提要的标签或底部。如果我将其放在 viewDidLoad() 中,我会在尝试时遇到相同的错误在某处的 viewDidLoad() 之外使用它 该结构可以独立存在,位于单独的文件中。最后四行进入 viewDidLoad()。然后应该替换最后两个打印语句以适合您的代码的其余部分。

以上是关于如何快速初始化我的数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP实现快速排序

如何使用 json 对象数组初始化 JSONModel?

C89,C99: C数组&结构体&联合体快速初始化

初始化数组时使用(或不使用)括号

如何使用动态数量的数据条目初始化表单集

URL数组快速抛出可选错误