在ViewDidLoad中声明变量并在别处使用(Swift)

在ViewDidLoad中声明变量并在别处使用(Swift),swift,Swift,第一个Swift项目,我对范围如何工作感到困惑。我试图在ViewDidLoad中选择一个随机整数,然后允许用户猜测数字,但我无法确定如何在我的按钮操作中访问ViewDidLoad中创建的变量answer class ViewController: UIViewController { @IBOutlet var guess: UITextField! @IBOutlet var result: UILabel! @IBAction func guessButton(

第一个Swift项目,我对范围如何工作感到困惑。我试图在ViewDidLoad中选择一个随机整数,然后允许用户猜测数字,但我无法确定如何在我的按钮操作中访问ViewDidLoad中创建的变量
answer

class ViewController: UIViewController {

    @IBOutlet var guess: UITextField!

    @IBOutlet var result: UILabel!

    @IBAction func guessButton(sender: AnyObject) {

        var userGuess = guess.text.toInt()
        if userGuess != nil {
            if userGuess == answer {
                result.text = "You got it!"
            } else if userGuess > answer {
                result.text = "Too high! Guess again!"
            } else {
                result.text = "Too low!  Guess again!"
            }
        }

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        var answer = arc4random_uniform(100) + 1

        }
   }
三个范围:

  • 文件顶层

  • 对象类型声明顶层(如您的
    guess

  • 局部(内部函数大括号)(如您的
    userGuess

只能向上看(更高的周围范围)


因此,
guessButton
方法中的代码无法看到
viewDidLoad
方法中声明的变量。但它们都可以看到在文件顶级声明的变量或在对象类型声明顶级声明的变量。你认为哪一个在这里最合适?

只需将
answer
设置为变量存储属性(又称“ivar”)。好的,我想我应该在文件顶部声明它。这是否意味着不可能在一个方法中使用另一个方法中声明的变量?这似乎是一个常见的用例。我误解了吗?嗯,你有一半的机会,但你错了文件的顶部太显眼了-整个应用程序中的所有代码都可以看到。啊,等等。因此,如果他们都能看到它,任何一方都可以修改它。对吗?当然,这就是“看”的意思。你不能提及你看不见的东西。如果你能看到一些东西,你可以参考它。这就是作用域。好吧,让它工作起来了(谢谢),但是来自Python背景,这看起来像一个可疑的全局变量。是我错了,还是它们不像Python中那样可耻?