2016-03-01 63 views
-3

Im做這個應用程序,當我打電話變量的函數外,如圖波紋管iOS版雨燕的變量不是函數訪問

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var monsterImg: MonsterAnimation! 

@IBOutlet weak var heartImg: DragImages! 

@IBOutlet weak var foodImg: DragImages! 

// Skulls on Top Board 
@IBOutlet weak var penalty1Img: UIImageView! 
@IBOutlet weak var penalty2Img: UIImageView! 
@IBOutlet weak var penalty3Img: UIImageView! 


override func viewDidLoad() { 
    super.viewDidLoad() 

    // Skulls Alpha Manipulation 
    let DIM_ALPHA: CGFloat = 0.2 
    let OPAQUE: CGFloat = 1.0 
    let MAX_PENALTIES = 3 

    var penalties = 0 // VARIABLE NOT ABLE TO BE SEEN IN FUNCTION ALSO ABOVE ^^^ 

    foodImg.dropTarget = monsterImg 
    heartImg.dropTarget = monsterImg 

    // Skulls Alpha Initalzation 
    penalty1Img.alpha = DIM_ALPHA 
    penalty2Img.alpha = DIM_ALPHA 
    penalty3Img.alpha = DIM_ALPHA 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "itemDroppedOnCharacter:", name: "onTargetDropped", object: nil) 

} 

func itemDroppedOnCharacter(notif: AnyObject) { 

} 

func startSkullTimer() { 
    var skullTimer: NSTimer! 

    if skullTimer != nil { 
     skullTimer.invalidate() 
    } 

    skullTimer = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: "changeGameState", userInfo: nil, repeats: true) 

} 

func changeGameState() { 

    penalties++ // HERE IT"S NOT ABLE TO SEE THE VARIABLE ABOVE 

} 

它不會承認,但是當我把它在函數內部它的工作原理但其他變量和事物不能識別它,因爲它在函數中。我該如何解決這個問題,以便函數能夠識別變量?

+0

變量的範圍顯然只在'viewDidLoad'函數內。只需聲明。 –

回答

1

歡迎來到SO。你正面臨着「範圍」的問題。在內部作用域中定義的變量只能在內部作用域(函數)內訪問。一旦你退出該功能,變量「超出範圍」,並被遺忘。

將範圍看作圓的組。定義在圓圈(範圍)中的變量僅在該圓圈內可見。大圈內的圓圈可以訪問外圈中定義的變量。 (內部示波器可以訪問封閉示波器。)

函數有一個「包含範圍」,用於定義它們。如果一個函數是一個類的實例方法,那麼它可以訪問來自該對象的實例變量。因此,如果你需要兩個函數來訪問同一個變量,那麼這個變量需要在一個公共的外部範圍內。 (或者,如果一個函數調用另一個函數,則可以將該值作爲參數傳遞。)再次,例如方法,使這兩個函數都需要該類的實例變量可能是有意義的。

在你的情況下,這些是視圖控制器的實例方法,所以你只需要讓你的視圖控制器的變量penalties變成一個實例變量。你通過將它的聲明移到函數之外並且進入你的類的聲明的頂部來做到這一點。