2016-04-24 4 views
-1

я пытаюсь реализовать это решение для обработки несколько идентификаторов SEGUE с протоколом Protocol-Oriented Segue Identifiers in Swift, но я получил эту ошибку:типа 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 
    } 
} 

i копирование/вставка решения, но все тот же результат. и самое странное, что когда я загрузил проект из GitHub, он отлично работает. это сводит меня с ума.

ошибка: enter image description here

+0

1. Код, который вы показываете, не включает 'ViewController'. 2. Где происходит ошибка? – luk2302

+0

sory, отредактированный ... – i6x86

+0

@ i6x86 ошибка, которую вы получаете, означает, что вы не реализовали требуемые методы и переменные 'SegueHandlerType' – kabiroberai

ответ

0

Ошибка может быть сформулирована смешение, но что это означает, что вам нужно, чтобы убедиться, что вы реализуете методы и переменные (только SegueIdentifier перечислений в данном случае) в вашем ViewController классе. Сделайте это, и вам должно быть хорошо идти.

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

да, это работает, и мне очень жаль, но если вы прочтете комментарии (ниже моего глупого вопроса), вы заметите, что технически @kabiroberai ответил первым, поэтому я выбираю его ответ. Большое спасибо! – i6x86

Смежные вопросы