我在Swift中有以下代码试图将一个简单的随机数生成器作为游戏的模拟器。
describe("Produce the reverse order of a word: ", function () {
describe("Case for en empty string", function() {
it("should return null for empty string", function() {
expect(reverseString('')).toEqual(null);
});
});
describe("Case for palindromes", function() {
it("should return true for `anna`", function() {
expect(reverseString('anna')).toEqual(true);
});
it("should return true for `NaN`", function() {
expect(reverseString('NaN')).toEqual(true);
});
it("should return true for `civic`", function() {
expect(reverseString('civic')).toEqual(true);
});
});
describe("Case for normal words", function() {
it("should return `skoob` for `books`", function() {
expect(reverseString('books')).toEqual('skoob');
});
it("should return `nomolos` for `solomon`", function() {
expect(reverseString('solomon')).toEqual('nomolos');
});
it("should return `csim` for `misc`", function() {
expect(reverseString('misc')).toEqual('csim');
});
});
});
我是编程Swift的新手,但我知道使用var randomNumber = 0
override func viewDidLoad() {
super.viewDidLoad()
randomNumber = Int(arc4random_uniform(74) + 1)
label.text = "\(randomNumber)"
}
和timer()
来使用计时器功能,但我不知道如何实现并使它成为一个新的数字出现在每隔10秒标记一次。谢谢你的帮助。
答案 0 :(得分:2)
使用Timer
,间隔为10
秒,从numbers
数组中提取新数字。从阵列中删除号码,这样您就不会拨打两次相同的号码。按下stop
按钮,或者您没有号码时,请invalidate
上的timer
停止播放。
class BingoCaller: UIViewController {
@IBOutlet weak var label: UILabel!
var numbers = Array(1...75)
let letters = ["B", "I", "N", "G", "O"]
var timer: Timer?
override func viewDidLoad() {
timer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { timer in
let index = Int(arc4random_uniform(UInt32(self.numbers.count)))
let number = self.numbers.remove(at: index)
self.label.text = "\(self.letters[(number - 1) / 15])-\(number)"
if self.numbers.isEmpty {
timer.invalidate()
}
}
}
@IBAction func stop(_ button: UIButton) {
timer?.invalidate()
}
}
有关后续步骤的建议:
AVSpeechSynthesizer
让iPhone真正说出数字。numbers
初始化为Array(1...75)
,将calledNumbers
初始化为[]
,然后重新开始。将Timer
循环移动到其自己的函数是一个好主意,以便可以从start
按钮调用它。答案 1 :(得分:0)
您可以定义辅助数组,以便检查是否已返回该数字:
var array = [Int]()
var timer: Timer?
override func viewDidLoad() {
super.viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(ViewController.timerFunction), userInfo: nil, repeats: true)
}
func timerFunction(){
var n = arc4random_uniform(75) + 1
while array.contains(Int(n)){
n = arc4random_uniform(75) + 1
}
array.append(Int(n))
label.text = String(n)
if array.count == 75{
timer?.invalidate()
}
}
通过这种方式,您可以确保在使用了所有数字后计时器失效,并避免索引删除错误。