Вопросы с тегом «swift-protocols»

Протоколы, специфичные для языка Swift

562
Как сделать слабую ссылку на протокол в «чистом» Swift (без @objc)

weak ссылки не работают в Swift, если только protocol не объявлено как @objc, чего я не хочу в чистом приложении Swift. Этот код выдает ошибку компиляции ( weakне может быть применен к не классу MyClassDelegate): class MyClass { weak var delegate: MyClassDelegate? } protocol MyClassDelegate { } Мне...

137
Использование протоколов в качестве типов массивов и параметров функций в swift

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

126
Протокол не соответствует самому себе?

Почему этот код Swift не компилируется? protocol P { } struct S: P { } let arr:[P] = [ S() ] extension Array where Element : P { func test<T>() -> [T] { return [] } } let result : [S] = arr.test() Компилятор сообщает: «Тип Pне соответствует протоколу P» (или, в более поздних версиях Swift,...

124
Что означает «Протокол… может использоваться только как общее ограничение, потому что он имеет требования типа Self или связанные с ним»?

Я пытаюсь создать словарь (на самом деле HashSet ) с ключом для настраиваемого протокола в Swift, но он дает мне ошибку в заголовке: Протокол myProtocol может использоваться только в качестве общего ограничения, поскольку он имеет требования типа Self или связанные с ним. и я не могу понять это....

105
Метод не - '@ objc' не удовлетворяет необязательному требованию протокола '@objc'

Обзор: У меня есть протокол P1, который обеспечивает реализацию по умолчанию одной из дополнительных функций Objective-C. Когда я предоставляю реализацию дополнительной функции по умолчанию, появляется предупреждение Предупреждение компилятора: Non-'@objc' method...

102
Протокол может использоваться только как общее ограничение, потому что он имеет требования Self или associatedType.

У меня есть протокол RequestType, и у него есть модель AssociatedType, как показано ниже. public protocol RequestType: class { associatedtype Model var path: String { get set } } public extension RequestType { public func executeRequest(completionHandler: Result<Model, NSError> -> Void) {...

97
Как заставить перечисление соответствовать протоколу в Swift?

В документации Swift говорится, что классы , структуры и перечисления могут соответствовать протоколам, и я могу добраться до точки, где все они соответствуют. Но я не могу заставить перечисление вести себя так же, как примеры классов и структур : protocol ExampleProtocol { var simpleDescription:...

96
Как в Swift объявить переменную определенного типа, которая соответствует одному или нескольким протоколам?

В Swift я могу явно указать тип переменной, объявив ее следующим образом: var object: TYPE_NAME Если мы хотим пойти дальше и объявить переменную, которая соответствует нескольким протоколам, мы можем использовать protocolдекларативную: var object: protocol<ProtocolOne,ProtocolTwo>//etc Что,...

92
«Фатальная ошибка: нельзя соединить массив с Objective-C» - зачем вы вообще пытаетесь, Swift?

Я объявил протокол Swift: protocol Option { var name: String { get } } Я объявляю несколько реализаций этого протокола - некоторые классы, некоторые перечисления. У меня есть контроллер представления со свойством, объявленным так: var options: [Option] = [] Когда я пытаюсь установить это свойство...

91
Swift - метод класса, который должен быть переопределен подклассом

Есть ли в Swift стандартный способ сделать "чистую виртуальную функцию", т.е. тот, который должен быть переопределен каждым подклассом, и который, если это не так, вызывает ошибку времени компиляции?...

82
Функция протокола возвращает Self

У меня есть протокол P, который возвращает копию объекта: protocol P { func copy() -> Self } и класс C, реализующий P: class C : P { func copy() -> Self { return C() } } Однако, если я помещаю возвращаемое значение, Selfя получаю следующую ошибку: Невозможно преобразовать возвращаемое...