2017-11-08 4 views
1

Ich versuche, git Projekt XLPagerTabStrip zu implementieren.Wie zu beheben "entspricht nicht dem Protokoll", wenn es tut

Nach dem Projekt, jeder Controller muss:

Jeder View-Controller von PagerTabStripDataSource des Viewcontrollers (für :) Verfahren vorgesehen müssen entsprechen zu Infoprovider

Aber der folgende Code führt: does not conform to protocol

extension UserProfileSubController: IndicatorInfoProvider { 

    func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { 

     return IndicatorInfo(title: "UserProfileSubController") 
    } 
} 

enter image description here

enter image description here

enter image description here

Wenn ich will Auto beheben das Problem es erneut implementiert die gleiche Protokollfunktion und dann wirft ungültig Neudeklaration.

enter image description here

Wie beheben Sie does not conform to protocol Problem, wenn der Controller in der Tat es nicht entspricht? Was vermisse ich? Hilfe wird sehr geschätzt.

PS: Ich habe das Projekt, den Build-Ordner gereinigt, abgeleitete Daten entfernt, neu gestartet und Pod aktualisiert sowie Neuinstallation von Pod.

+0

Ich habe Ihren Code in einem Beispielprojekt versucht und es hat funktioniert. Ich benutzte den Pod nicht, sondern lud den Quellcode direkt von github herunter –

+0

Ich vermute, dass es einige Fehler bei der Deklaration oder Protokollerweiterung gibt, die ich momentan vermisse. hat gehofft, es gibt eine Art einfachere Lösung, um den tatsächlichen Fehler zu finden. Danke für Ihre Mühe –

Antwort

0

Am Ende war es Kopieren/Einfügen/Abhängigkeitsproblem. Neustart und Entfernen des Pods und Abhängigkeitscode und Neuinstallation löste das Problem am Ende.

-1

Ich bin mir nicht sicher, ob dies funktionieren wird, aber diese:

  1. den Code in der Klasse setzte nicht in der Verlängerung.
  2. Verwendung dieser speziellen pod pod 'XLPagerTabStrip', '~> 7.0'
0

Überprüfen Sie die IndicatorInfo Klasse wie folgt lautet:

public struct IndicatorInfo { 

    public var title: String? 
    public var image: UIImage? 
    public var highlightedImage: UIImage? 

    public init(title: String?) { 
     self.title = title 
    } 

    public init(image: UIImage?, highlightedImage: UIImage? = nil) { 
     self.image = image 
     self.highlightedImage = highlightedImage 
    } 

    public init(title: String?, image: UIImage?, highlightedImage: UIImage? = nil) { 
     self.title = title 
     self.image = image 
     self.highlightedImage = highlightedImage 
    } 

} 

statt öffentlichen struct IndicatorInfo {} Sie öffentliche Protokoll IndicatorInfo verwendet {}

Und ich hoffe, dass Sie nur ein Protokoll in einer einzigen Klasse verwenden können.

extension YourViewController : IndicatorInfoProvider { 

    // MARK: - Top Tab Bar Method - IndicatorInfoProvider 
    func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { 
     return IndicatorInfo(title: "titleStringHere", image: UIImage(named: "Your_Image_Name")) 
     /*or return IndicatorInfo(title: "titleStringHere") */ 
    } 
} 
+0

in diesem Fall war es richtig, dass es eine Struktur ist –

Verwandte Themen