2017-01-24 3 views
-1

Ich versuche, grundlegende iOS Swift3 zu lernen und die Storyboard-Methode zu verwenden. Ich arbeitete den Code in the tutorial on this website durch.Segue hat kein Mitglied ViewController

Nachdem ich die Storyboard-Links für FirstCustomSegue erstellt habe, code ich wie folgt; Ich habe hinzugefügt Kommentare für alle 6 Fehler:

class FirstCustomSegue: UIStoryboardSegue { 

override func perform() { 
    // Value of type 'FirstCustomSegue' has no member 'sourceGameViewController' 
    var firstVCView = self.sourceGameViewController.view as UIView! 
    var secondVCView = self.destinationGameViewController.view as UIView! 

    // Cannot call value of non-function type 'UIScreen' 
    let screenWidth = UIScreen.mainScreen().bounds.size.width 
    let screenHeight = UIScreen.mainScreen().bounds.size.height 

    secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight) 

    // Cannot call value of non-function type 'UIApplication' 
    let window = UIApplication.sharedApplication().keyWindow 
    window?.insertSubview(secondVCView, aboveSubview: firstVCView) 

    // Value of type 'FirstCustomSegue' has no member 'sourceGameViewController' (This is in the (Finished) line, of course) 

    UIView.animateWithDuration(0.4, animations: {() -> Void in 
     firstVCView.frame = CGRectOffset(firstVCView.frame, 0.0, -screenHeight) 
     secondVCView.frame = CGRectOffset(secondVCView.frame, 0.0, -screenHeight) 

    }) { (Finished) -> Void inself.sourceGameViewController.presentGameViewController(self.destinationGameViewController as UIViewController, 
       animated: false, 
       completion: nil) 
    } 
} 

} 

mir Sieht aus, als ob es gibt eine fehlende Verbindung irgendwo, aber ich kann es nicht finden. Vielleicht ist ein Teil davon eine Änderung in iOS10? Einige Suche hat vorgeschlagen, dass dies das Problem mit den UIScreen.mainScreen() - Bits sein kann, aber ich kann nichts finden, das die Probleme behebt.

+0

Das Tutorial Sie finden iOS 8, die in Swift 2.x. Codierungs Sie andererseits kodieren in Swift 3. wann auch immer Sie dieses sehen ** kann Wert des Nichtfunktionstyps nicht nennen 'UIScreen ** es bedeutet, dass das Ding, das Sie anrufen ** nicht ** eine Funktion ist, also sollten Sie entfernen das '()'. Wenn Sie 'UIScreen.' eingeben und dann mit der Eingabe von m ... beginnen, sehen Sie, dass es nur main als Eigenschaft hat, NICHT als Funktion. Das gleiche Problem für Ihre 'UIApplicaton' sollte es 'UIApplication.shared' sein ... eine Regel des Daumens ist, wenn Sie alte Tutorials verwenden, nicht kopieren/einfügen, stattdessen geben Sie ein und sehen, ob der sytanx aktualisiert wird. – Honey

+0

Zusätzlich hat der Fehler von ** Wert vom Typ 'FirstCustomSegue' kein Mitglied 'sourceGameViewController ** bedeutet, dass Ihr FirstCustomSegue ** keine * Eigenschaft * (auch Member genannt) 'ViewController' hat. Vielleicht haben Sie Ihr Eigentum etwas anderes genannt und es ist ein Tippfehler oder überhaupt keine solche Eigenschaft – Honey

+0

Vielen Dank - das ist immens hilfreich. Jetzt weiß ich, wie ich mit diesen Dingen voran komme! Herzlichen Dank. – CAgrippa

Antwort

1

Ich habe Ihren Code in Swift 3.0 Stil umgeschrieben. Aber verwenden Sie Xcode 8? Wenn Sie Xcode 8 verwenden, kann der Compiler Ihnen helfen, Syntaxfehler zu beheben.

class FirstCustomSegue: UIStoryboardSegue { 

    override func perform() { 
     let firstVCView: UIView = self.source.view 
     let secondVCView: UIView = self.destination.view 

     let screenWidth = UIScreen.main.bounds.size.width 
     let screenHeight = UIScreen.main.bounds.size.height 
     secondVCView.frame = CGRect(x: 0.0, y: screenHeight, width: screenWidth, height: screenHeight) 

     let window = UIApplication.shared.keyWindow 
     window?.insertSubview(secondVCView, aboveSubview: firstVCView) 

     UIView.animate(withDuration: 0.4, animations: { 
      firstVCView.frame = firstVCView.frame.offsetBy(dx: 0.0, dy: -screenHeight) 
      secondVCView.frame = secondVCView.frame.offsetBy(dx: 0.0, dy: -screenHeight) 
     }, completion: { [unowned self] finished in 
      self.source.present(self.destination, animated: false, completion: nil) 
     }) 
    } 
} 

Sie können Ihren Code auch selbst in die neueste Swift-Syntax konvertieren. Konvertieren
Bearbeiten>> To Current Swift Syntax ...
https://i.stack.imgur.com/niayG.png

0

Sie müssen verwenden

UIApplication.shared

und

UIScreen.main

in Swift 3. (kann noch nicht kommentieren.)

+0

Das erzeugt dieselbe Fehlermeldung: "Wert des Nicht-Funktionstyps X kann nicht aufgerufen werden" – CAgrippa

+0

Ich kopiere Ihre Klasse und benannte "UIScreen.mainScreen(). Bounds.size.width" in "UIScreen.main.bounds.size. Breite ", kompiliert es auf jeden Fall. – hoshy

Verwandte Themen