如何快速初始化我的数组
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()。然后应该替换最后两个打印语句以适合您的代码的其余部分。以上是关于如何快速初始化我的数组的主要内容,如果未能解决你的问题,请参考以下文章