, Однако в Swift 4.x, как обсуждалось в моем ответе, такая конструкция не поддерживается компилятором.

олнение к этому синтаксису с расширением протокола:

protocol P {}
extension P where Self : UIView {}

... Я случайно обнаружил, что вы можете использовать ту же фразу where в самом протоколе:

protocol P where Self : UIView {}

Обратите внимание, что этоне то же самое, что и предложение where, ограничивающее общий протокол, и делаетне Сам по себе сделать P общим протоколом.

Мои эксперименты, кажется, показывают, что здесь можно использовать только двоеточие, и после двоеточия должно быть классом или протоколом (который может быть общим).

Мне стало любопытно: как это ускользнуло от моего внимания? Поэтому я отправился на поиски доказательств того, когда он возник. В Swift 3.0 прежний синтаксис допустим, ноне последний. В Swift 3.3 оба законны. Таким образом, последний синтаксис должен быть незаметно введен во что-то вроде Swift 3.2. Я говорю «тихо», потому что ничего не могу найти в примечаниях к выпуску.

Для чего нужен второй синтаксис? Является ли это, по-видимому, просто удобным способом убедиться, что никакой другой тип не может принять этот протокол? Заголовки Swift, похоже, не используют его.

Ответы на вопрос(1)

Ваш ответ на вопрос