2016-04-24 156 views
-1

我試圖實施該解決方案來處理與協議Protocol-Oriented Segue Identifiers in Swift多個SEGUE標識符,但是我得到這個錯誤:類型的ViewController不符合協議

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

下面是代碼:

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 
    } 
} 

我複製/粘貼解決方案,但仍然是相同的結果。最奇怪的是,當我從GitHub下載項目時,它工作正常。這迫使我堅持下去。

錯誤:enter image description here

+0

1.您顯示的代碼不包含「ViewController」。 2.錯誤發生在哪裏? – luk2302

+0

sory,編輯... – i6x86

+0

@ i6x86你得到的錯誤意味着你還沒有實現'SegueHandlerType'所需的方法和變量 – kabiroberai

回答

0

該錯誤可能是混淆的措辭,但它的意思是,你需要確保你正在實現你的ViewController類的方法和變量(只SegueIdentifier枚舉在這種情況下)。這樣做,你應該很好去。

0

協議SegueHandlerType包含行SegueIdentifier: RawRepresentable。這意味着符合協議的類必須定義嵌套類型SegueIdentifier

本教程包括爲此事如下:

// 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 
} 

如果添加了代碼編譯器將不再抱怨。

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

我沒有讀過評論:我的錯誤,我感到很蠢。 – i6x86

+0

@ i6x86現在可以工作嗎?如果我的答案解決了您的問題,請點擊左邊的複選標記 – luk2302

+0

yes接受它,但我非常抱歉,但如果您閱讀了評論(在我的愚蠢問題下),您會注意到技術上@kabiroberai首先回答,所以我選擇他的答案。非常感謝你! – i6x86

相關問題