2016-04-24 13 views
-1

ich versuche, diese Lösung zu implementieren mehr segue Identifikatoren mit Protokoll Protocol-Oriented Segue Identifiers in Swift zu handhaben, aber ich habe diesen Fehler:Typ Viewcontroller entspricht nicht Protokoll

type 'ViewController', doesn't conform to protocol 'SegueHandlerType'

Hier ist der Code:

protocol SegueHandlerType { 
    associatedtype SegueIdentifier: RawRepresentable 
} 
extension SegueHandlerType where Self: UIViewController, SegueIdentifier.RawValue == String { 

    func performSegueWithIdentifier(segueIdentifier: SegueIdentifier, 
            sender: AnyObject?) { 

     performSegueWithIdentifier(segueIdentifier.rawValue, sender: sender) 
    } 

    func segueIdentifierForSegue(segue: UIStoryboardSegue) -> SegueIdentifier { 

     // still have to use guard stuff here, but at least you're 
     // extracting it this time 
     guard let identifier = segue.identifier, 
      segueIdentifier = SegueIdentifier(rawValue: identifier) else { 
       fatalError("Invalid segue identifier \(segue.identifier).") } 

     return segueIdentifier 
    } 
} 

ich kopierte/klebte die Lösung aber immer noch das gleiche Ergebnis. und das Merkwürdigste ist, dass wenn ich das Projekt vom GitHub heruntergeladen habe, es funktioniert. Das macht mich verrückt.

der Fehler: enter image description here

+0

1. Der angezeigte Code enthält keinen 'ViewController'. 2. Wo tritt der Fehler auf? – luk2302

+0

Sory, bearbeitet ... – i6x86

+0

@ i6x86 der Fehler Sie erhalten bedeutet, dass Sie nicht die erforderlichen Methoden und Variablen von 'SegueHandlerType' implementiert haben – kabiroberai

Antwort

0

Der Fehler kann zum Verwechseln formuliert werden, aber was es bedeutet, dass Sie sicherstellen müssen, dass Sie die Methoden und Variablen implementieren (nur der SegueIdentifier Enum in diesem Fall) in Ihrer ViewController Klasse. Tu das und du solltest gut gehen.

0

Das Protokoll enthält die Zeile SegueHandlerTypeSegueIdentifier: RawRepresentable. Das bedeutet, dass die Klasse, die dem Protokoll entspricht, einen verschachtelten Typ SegueIdentifier definieren muss.

Das Tutorial umfasst die folgenden in dieser Sache:

// the compiler will now complain if you don't have this implemented 
// you need this to conform to SegueHandlerType 
enum SegueIdentifier: String { 
    case TheRedPillExperience 
    case TheBluePillExperience 
} 

Wenn Sie diesen Code hinzufügen, wird der Compiler nicht mehr beschweren.

class ViewCtr : UIViewController, SegueHandlerType { 
    enum SegueIdentifier: String { 
     case YourSegueIdentifiersGoHere 
    } 
} 
+0

Ich habe die Kommentare nicht gelesen: mein Fehler, ich fühle mich dumm. – i6x86

+0

@ i6x86 Funktioniert es jetzt? Wenn meine Antwort Ihr Problem gelöst hat, akzeptieren Sie es, indem Sie auf das Häkchen auf der linken Seite klicken. – luk2302

+0

ja es funktioniert, und es tut mir so leid, aber wenn Sie die Kommentare lesen (unter meiner dummen Frage), werden Sie das technisch @ kabiroberai bemerken antwortete zuerst, also wähle ich seine Antwort. vielen Dank! – i6x86

Verwandte Themen