2014-09-09 14 views
20

W Swift, w jaki sposób definiujemy protokół, który rozszerza lub specjalizuje protokół podstawowy? Dokumentacja nie wydaje się jasne.Jak przedłużyć protokół w Swift

Również niejasne, czy protokoły Swift są zgodne/rozszerzają protokół NSObject? Jest to interesujące pytanie, ponieważ wskazywałoby, czy Swift używa wywołań opartych na vtable lub wiadomości do wywoływania metod protokołów.

Odpowiedz

28

Dziedziczenie protokołu używa zwykłej składni dziedziczenia w Swift.

protocol Base { 
    func someFunc() 
} 

protocol Extended : Base { 
    func anotherFunc() 
} 

Protokoły Swift nie domyślnie zgodne NSObjectProtocol. Jeśli zdecydujesz, że twój protokół będzie zgodny z NSObjectProtocol, ograniczysz protokół do używania tylko z klasami.

7

Składnia jest taka sama, jak w przypadku deklarowania klasy odziedziczonej z nadklasy.

protocol SomeProtocol { } 

protocol SomeOtherProtocol: SomeProtocol { } 

I nie, nie robią tego. Jeśli chcesz, aby twój protokół był zgodny z NSObjectProtocol, możesz dostarczyć wiele protokołów do nowego protokołu, aby dostosować się do tego.

protocol SomeOtherProtocol: SomeProtocol, NSObjectProtocol { } 
+0

Dziękuję bardzo. Zaakceptowano odpowiedź Connora, która pojawiła się minutę wcześniej i dostarczyła interesującą informację o tym, że NSObjectProtocol jest ograniczony do klas. –

Powiązane problemy