Xcode(Swift)使用来自另一个函数

时间:2015-05-14 18:54:54

标签: function swift variables

我有一个按下按钮时启动的计时器。

生成随机数,当时间到达随机数(1-100)时,时间应该停止。

我能使它工作的唯一方法是在时间函数(计数)中生成随机数,但是每次计数器增加时都会生成一个随机数,这意味着只有当随机数生成相同的时候它才会停止作为柜台。如果随机数和时间不在同一个数字上,则时间超过100 - 我发现这是通过放置一个标签来显示随机数。

我设法通过将随机数放在按钮功能中来生成一次随机数,然而定时器功能无法识别stopNumber。这种方式似乎是最实用的,如何从计数功能中的按钮功能调用变量stopNumber?

以下代码:

func generateNewNumber() -> UInt32 {
    return arc4random_uniform(100) + 1

}


func Counting() {

var stopNumber:Int = Int(generateNewNumber())

timerCount += 1
timerLabel.text = "\(timerCount)"

if timerCount == stopNumber {
        timer.invalidate()
        timerRunning = false
}

@IBAction func startButton(sender: UIButton) {


    if timerRunning == false && timerCount == 0 {
        timer = NSTimer.scheduledTimerWithTimeInterval(0.06, target: self, selector: Selector("Counting"), userInfo: nil, repeats: true)
        timerRunning = true
        }

}

我对此很新,任何帮助都会非常感激。

4 个答案:

答案 0 :(得分:0)

在函数范围之外声明您的变量,但是在类的范围内。 以下代码段显示了此概念。如果您需要帮助将其实现到您的代码中,请更加努力:) 如果仍然无效,请再次询问。

class myClass{
  private var stopNumber:Int = 15
  func counting() {
    stopNumber++ 
    //You can access this variable from within all functions inside of myClass
  }
}

答案 1 :(得分:0)

您可以通过多种方式共享变量。

  1. 在方法之外创建一个变量,这样做:

    class myClass {
        var myVariable = 0
        myMethod() {/*use variable here*/}
        anotherMethod() {/*use variable here too*/}
    }
    
  2. 您可以在类之外创建变量,甚至可以让其他类可以访问:

    var myVariable = 0
    
    class myClass {
        myMethod() {/*use variable here*/}
        anotherMethod() {/*use variable here too*/}
    }
    
  3. 您可以在调用方法时将变量作为参数传递:

    myMethod() {
        var variable = 0
        anotherMethod(variable) {/*use variable here*/}
    }
    anotherMethod(var variab) {/*use 'variab' here*/}
    

    这是相当不方便的,这就是为什么我更喜欢使用其中一个。

  4. 我希望能帮到你:)。

答案 2 :(得分:0)

感谢所有的输入,我上面的一些问题是声明函数外部的变量导致在App启动时生成随机数。我希望每次按下开始按钮时都会生成一个新的随机数。

我找到了以下解决方案

var stopNumber = 0


}

func Counting() {

timerCount += 1
timerLabel.text = "\(timerCount)"

if timerCount == stopNumber {
    timer.invalidate()
    timerRunning = false
}

@IBAction func startButton(sender: UIButton) {

var stopGen:Int = Int (arc4random_uniform(100) + 1)
stopNumber = stopGen

if timerRunning == false && timerCount == 0 {
    timer = NSTimer.scheduledTimerWithTimeInterval(0.06, target: self, selector: Selector("Counting"), userInfo: nil, repeats: true)
    timerRunning = true
    }

}

感谢大家的帮助

答案 3 :(得分:0)

let randomNumber:Float = arc4random_uniform(2) == 0 ? -1.0 :  1.0
  • 2是最大数量
  • 0是fi值,也就是说,如果randomnumber为0,则值为-1,您当然可以更改它
  • 最后一个值是如果该值不为0
  • 然后您可以使用这些值来说明天气是否正确