Что именно делает `: class` в объявлении протокола?

Это сообщение SO прекрасно объясняет, как решить проблему создания weak delegate .

По существу, есть два подхода:

Использование @objc слова @objc :

 @objc protocol MyClassDelegate { } class MyClass { weak var delegate: MyClassDelegate? } 

Использование ключевого слова: :class :

 protocol MyClassDelegate: class { } class MyClass { weak var delegate: MyClassDelegate? } 

Я пытаюсь сделать некоторые исследования, чтобы понять, какие именно различия между этими двумя подходами. Документы довольно понятны в использовании @objc :

Чтобы быть доступным и пригодным для использования в Objective-C, класс Swift должен быть потомком класса Objective-C или должен быть помечен как @objc .

Однако нигде я не нашел информации о том, что :class действительно делает. Рассматривая все понятие в деталях, на самом деле это не имеет большого смысла. Я понимаю, что class является ключевым словом в Swift для объявления классов. Итак, здесь кажется, что мы используем сам class ключевого слова как протокол (поскольку мы добавляем его после : после объявления протокола).

Итак, почему это даже работает синтаксически и что именно он делает?

One Solution collect form web for “Что именно делает `: class` в объявлении протокола?”

:class гарантирует, что только классы могут реализовать протокол. И это любой класс, а не только подклассы NSObject . @objc , с другой стороны, сообщает компилятору использовать сообщение Objective-C-style, передающее методы вызова, вместо использования функций vtable для поиска.

  • Создание пейджингового UICollectionView с помощью Swift
  • Невозможно вызвать «XCTAssertEqual» с помощью списка аргументов ((ErrorType), XMPPError)
  • как установить дату выбора даты с одним месяцем назад с сегодняшнего дня
  • Могу ли я изменить язык Replaykit?
  • Навигация с помощью только кнопки «Назад» и прозрачного фона
  • systemLayoutSizeFittingSize дает неправильный размер при первом вызове
  • Как написать Unit Test для функции запроса Alamofire?
  • Работа со значениями NSNumber и Integer в Swift 3
  • swift convert Диапазон <Int> до
  • Как получить доступ к IBOutlet из другого класса
  • Плавный пользовательский пейджинг для UIScrollView
  • Interesting Posts

    Xcode CI не работает на различных тренажерах

    Как изменить длительность вибрации в iOS / Swift?

    UIScrollView – индикатор прокрутки с белыми точками (например, на домашнем экране)

    Городской дирижабль – Отправить Push с NSURLConnection

    У меня есть общедоступный URL-адрес для файла iCloud, как я могу получить ссылку DIRECT для загрузки в iOS?

    Вручную затухание цвета от одного UIColor к другому

    Вид таблицы не отскакивает правильно при изменении ограничений

    Множественные контроллеры просмотра и один просмотр

    Справка AVAudioPlayer: одновременное воспроизведение нескольких звуков, их одновременное прерывание и работа с автоматическим подсчетом ссылок

    Увеличьте высоту прыжка при более длительном касании до максимальной высоты

    Пример экрана входа в систему на основе раскадровки

    Подключение ZXing к кнопке в xcode

    Компоненты, связанные с отдельными файлами, поэтому они могут подключаться к основному файлу для работы

    как выровнять мое изображение в центре IOS по горизонтали

    Как перейти на персональную команду в Apple Developer Center

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.