2016-06-14 2 views
2

В объекте-c вы всегда можете проверять протоколы класса через свои публичные заголовки. Но если у вас есть класс в swift, как вы знаете, к каким протоколам он соответствует? Возможно ли это?Как определить, какие протоколы соответствуют классу в быстром?

(Да, я понимаю, что в документации Apple перечислены протоколы, которые она соответствует, но это не похоже на реальное решение, так как вы можете работать с частной каркасом или иметь какую-то другую теоретическую причину для того, . протоколы)

Кроме того, да, я знаю, что вы можете проверить для конкретного протокола с использованием методики, описанной здесь: https://stackoverflow.com/a/37351027/18961

+1

Вы можете использовать 'is' или 'as' для проверки соответствия (перейдите к: Проверка соответствия протокола): https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols .html –

ответ

1

Я не верю, что вы можете сделать это, не опираясь на время выполнения Objective-C. Импортируйте ObjectiveC и используйте функцию class_copyProtocolList().

+0

Это тоже мое понимание, но я надеялся, что есть другой путь. – livingtech

+1

Это работает только для подклассов NSObject, соответствующих протоколам @objc. –

2

В Xcode вы можете запрограммировать любой тип Swift, чтобы получить заголовочный вид его открытого интерфейса, включая совместимость протоколов, добавленную как в исходном определении, так и в расширениях.

Это не показывает соответствие протокола, добавленное библиотеками вне определяющей библиотеки, например. если вы нажмете команду String, вы не увидите свой собственный extension String: MyFunkyProtocol. Но я думаю, что это, по сути, то, что вы ищете.

Для Swift standard lib, http://swiftdoc.org/ - хорошая ссылка.

+0

Какова конкретная опция меню для просмотра этого общедоступного интерфейса? Возможно, я просто этого не вижу. – livingtech

+0

Щелкните правой кнопкой мыши текст в редакторе, «Перейти к определению». –

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