Я хочу сослаться на неизменяемую переменную вне функции, в которой она объявлена - PullRequest
0 голосов
/ 05 ноября 2018

Я очень новичок в swift и пытаюсь сослаться на мою неизменяемую переменную let button1 = SKLabelNode(fontNamed: "Bulky Pixels") вне функции, в которой она объявлена.

Это функция, в которой находится неизменяемая переменная:

func runMathsProblem(){
    currentGameState = gameSate.mathSlove

    if currentGameState == gameSate.mathSlove{
        self.speed = 0
    }

    let button1 = SKLabelNode(fontNamed: "Bulky Pixels")
    button1.name = "Button1"
    button1.text = "1"
    button1.fontSize = 110
    button1.fontColor = SKColor.white
    button1.zPosition = 120
    button1.position = CGPoint(x: self.size.width * 0.3, y: self.size.height * 0.32)
    self.addChild(button1)
}

Я хочу иметь доступ к button1 в функции:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch: AnyObject in touches{
        let pointOfTouch = touch.location(in: self)

        **//I want to refer to it like this**
        if button1.contains(pointOfTouch){
            self.speed = 1
        }
    }
}

Есть ли способ обратиться к нему, используя имя, которое я дал?

Я пытался найти способы онлайн, но я не уверен, что ищу правильный вопрос.

Надеюсь, этого вам достаточно, ребята, чтобы понять, что я пытаюсь сделать.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы не можете этого сделать. Локальные переменные являются локальными и существуют только в той области, в которой они определены. Если вы определяете переменную внутри функции, она существует только внутри этой функции.

Если вы хотите, чтобы переменная была видимой для других функций в том же объекте, сделайте ее переменной экземпляра:

class MyClass {

     //Create an instance variable button1
     var button1: SKLabelNode?

     func runMathsProblem(){
         //Your code removed for brevity

         //This function now sets the instance variable rather than a local variable
         button1 = SKLabelNode(fontNamed: "Bulky Pixels")

         //Your code using Button1 removed for brevity
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch: AnyObject in touches{
            let pointOfTouch = touch.location(in: self)

            //Now this code works.
            if button1?.contains(pointOfTouch){
                self.speed = 1
            }
        }
    }
}
0 голосов
/ 05 ноября 2018

Объявите это вне функции как

var button1:SKLabelNode!

затем

button1 = SKLabelNode(fontNamed: "Bulky Pixels")

но учтите, что вам нужно позвонить runMathsProblem перед любым событием внутри touchesMoved или сделать его необязательным, например

var button1:SKLabelNode?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...