Можно ли создать расширение только для класса для протокола?

Использование протокола только для класса мне ясно. Я знаю, что могу сделать что-то вроде:

protocol HashableClass: class, Hashable {}

Но мне интересно, можно ли создать расширение только для класса:

extension Hashable: class {} / extension Hashable where Self is class {} ??

Второй вопрос: возможно ли создавать неклассовые протоколы (противоположные классовым протоколам)?

Заранее спасибо.


person JMI    schedule 01.06.2016    source источник


Ответы (1)


Все классы неявно соответствуют AnyObject, поэтому вы можете определить «расширение только для класса» с помощью

extension Hashable where Self: AnyObject {

}

(Также кажется, что нет никакой разницы между protocol Foo: class и protocol Foo: AnyObject, сравните -a-class-onl">В чем разница между протоколом, расширенным из AnyObject, и протоколом только для класса?.)

Ограничение протокола неклассовыми типами, насколько мне известно, невозможно.

person Martin R    schedule 01.06.2016