2017-05-26 11 views
3

Wie würde ich prüfen, ob eine Funktion aufgerufen wurde? Ich habe eine Funktion erstellt, um zu sehen, ob das Niveau wie so fertig gestellt wurde:Überprüfen Sie, ob die Funktion aufgerufen wurde?

func levelOneCompleted(){ 

} 

Wenn der Pegel eines schlagen wird, rufe ich die Funktion levelOneCompleted().

Die Szene geht dann zu einer anderen Szene. An dieser Stelle möchte ich überprüfen, ob die Funktion aufgerufen wurde. Ich denke, dass ich eine Art "wenn Aussage" machen kann.

if levelOneCompleted is called { 
//do this 

else{ 

//do this 
} 

Was wäre der beste Weg, um dies zu tun?

Antwort

3

eine boolean-Flag auf true innerhalb levelOneCompleted() Set:

var isLevelOneCompleted = false 

func levelOneCompleted(){ 
    // do things... 
    isLevelOneCompleted = true 
} 

Und später ...

if isLevelOneCompleted { 
    //do this 
} else { 
    //do this 
} 
+0

Danke für die Antwort! Gibt es eine Möglichkeit, dies in zwei getrennten Szenen zu tun? Szene 1 ruft die Funktion auf und schaltet auf Szene 2 um. Kann Szene 2 die Funktion aus Szene 1 sehen? –

+0

@MattCantrelle Wie wird Szene 2 präsentiert? Verwenden eines Storyboard-Segments? Wenn dies der Fall ist, würde ich eine Eigenschaft im View-Controller festlegen, die angibt, dass 'levelOneCompleted()' in der 'prepareForSegue'-Methode aufgerufen wurde. – Paolo

+0

Nein, Sir, ich benutze keine Storyboards für dieses Projekt. In der ersten Szene habe ich durch eine einfache "let sceneTwo = SKscene (Dateiname:" this ") festgelegt, was die zweite Szene ist. Ich nenne es dann, um die Szene zu präsentieren. –

1

Swift 3 & Xcode 8.3.2

Es gibt 2 Trick Tun Sie dies, hier ist der Code:

// Async operation 
func levelOneCompleted(completion: (_ completed: Bool) -> Void) { 
    // do your function here 
    completion(true) 
} 

// Here is how to use it 
// than u can declare this in viewDidLoad or viewDidAppear, everywhere you name it 
override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 

    // this is async operation 
    levelOneCompleted { (completed) in 
     if completed { 
      print("levelOneCompleted is complete") 
      // do something if levelOneCompleted is complete 

      DispatchQueue.main.async { 
       // Update your UI 
      } 
     } else { 
      print("levelOneCompleted is not completee") 
      // do something if levelOneCompleted is not complete 

      DispatchQueue.main.async { 
       // Update your UI or show an alert 
      } 
     } 
    } 
} 


// Or u can use this code too, and this is Sync operation 
var isLevelTwoCompleted: Bool = false 
func levelOneCompleted() { 
    // do your function here 
    isLevelTwoCompleted = true 
} 


// to check it u can put this function everywhere you need it 
if isLevelTwoCompleted { 
    //do something if level two is complete 
} else { 
    //do something if level two is not complete 
} 
+0

Hallo Matt, ich frage mich, ob das genug war, um dich auf die richtige Spur zu bringen. Es sieht so aus, als würde es funktionieren, wenn Sie Level 1 und Level 2 vom selben Controller aus aufrufen. Wenn Sie immer noch stecken bleiben, bearbeiten Sie einfach Ihre Frage oben. – Mozahler

Verwandte Themen