问题描述
嗨,我正在尝试打乱一个数组,然后我可以按照打乱它们的顺序在我所有的 IBAction 函数中使用该数组。代码示例与我的想法相同...
Class ViewContoller: UIViewContoller
Let numbers = [1,2,3,4,5]
override func viewDidLoad() {
super.viewDidLoad() }
我尝试在这里编写一个函数来创建一个已洗牌的数组,以便我可以使用该洗牌的数组...
func shuffledArray() -> Array<Int> {
let numbersArray = numbers.shuffled()
return numbersArray }
let myListOfShuffledNumbers = shuffledArray()
现在这在操场上工作..但是当我尝试这个我的viewcontroller.swift我得到错误'不能在属性初始值设定项中使用实例成员'shuffledArray';属性初始值设定项在 self 可用之前运行。
所以我知道如果我在一个 IBAction 函数中,我可以运行函数 let shuffledNumbers = shuffledArray()
并获得一个混洗数字数组来使用,但我的问题是我需要在另一个 IBAction 函数中使用相同的混洗顺序。那么如何制作一个通用的混洗数字数组以在我的视图控制器上的任何地方使用。
我试过了lazy var myListOfShuffledNumbers = shuffledArray()
这消除了我的错误,但对我没有帮助,因为当我在 2 个不同的 IBAction 函数中使用“myListOfShuffledNumbers”时,我得到了 2 个不同的列表顺序
我能做什么??谢谢
解决方法
您可以定义一个可以从 ViewContoller
中的任何位置访问的属性,如下所示:
class ViewContoller: UIViewContoller {
let unshuffledNumbers = [1,2,3,4,5]
var myListOfShuffledNumbers = [Int]() /// here! it's still empty at first
@IBAction func firstButtonPressed(_ sender: Any) {
myListOfShuffledNumbers = unshuffledNumbers.shuffled()
}
@IBAction func secondButtonPressed(_ sender: Any) {
/// do something with myListOfShuffledNumbers here...
}
}
起初,myListOfShuffledNumbers
仍然是一个空的 Int
数组。但是在您的第一个 IBAction
中,您可以将其分配给 unshuffledNumbers.shuffled()
。然后,您可以从第二个 IBAction
中访问它。
另外,只写 [Int]
而不是 Array<Int>
可能更容易——它们是一样的。
func shuffledArray() -> [Int] {
let numbersArray = numbers.shuffled()
return numbersArray
}
,
如果你想要一个被洗牌的数组,那么只需将它转换为一个集合。集合不会保持数组的原始顺序。