Запитання з тегом «swift-protocols»

Протоколи, характерні для мови Свіфт

6
Як я можу зробити слабку посилання на протокол у "чистому" Swift (без @objc)
weakпосилання, схоже, не працює в Swift, якщо а protocolне оголошено як @objc, чого я не хочу в чистому додатку Swift. Цей код дає помилку компіляції ( weakне може бути застосований до некласового типу MyClassDelegate): class MyClass { weak var delegate: MyClassDelegate? } protocol MyClassDelegate { } Мені потрібно профіксувати протокол …


7
Використання протоколів як типів масивів та функціональних параметрів швидко
Я хочу створити клас, який може зберігати об'єкти, що відповідають певному протоколу. Об'єкти повинні зберігатися в набраному масиві. Згідно з документацією Swift, протоколи можуть використовуватися як типи: Оскільки це тип, ви можете використовувати протокол у багатьох місцях, де дозволені інші типи, зокрема: Як тип параметра або тип повернення у функції, …

3
Протокол не відповідає собі?
Чому цей код 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" …

2
Що означає "Протокол ... може використовуватися лише як загальне обмеження, оскільки він має власні або асоційовані вимоги до типу"?
Я намагаюся створити Словник (власне HashSet ), введений на користувацькому протоколі в Swift, але він дає мені помилку в заголовку: Протокол 'myProtocol' може використовуватися лише як загальне обмеження, оскільки він має вимоги Self або асоційований тип і я не можу робити ні голови, ні хвостів. protocol Observing: Hashable { } …

3
Метод "@ objc" не відповідає необов'язковій вимозі протоколу "@objc"
Огляд: У мене є протокол P1, який забезпечує реалізацію за замовчуванням однієї з додаткових функцій Objective-C. Коли я забезпечую реалізацію додаткової функції за замовчуванням, виникає попередження Попередження компілятора: Non-'@objc' method 'presentationController(_:viewControllerForAdaptivePresentationStyle:)' does not satisfy optional requirement of '@objc' protocol 'UIAdaptivePresentationControllerDelegate' Версія: Швидкий: 3 Xcode: 8 (публічний реліз) Спроби: Спробували додавати, …

5
Протокол може використовуватися лише як загальне обмеження, оскільки він має вимоги Self або асоційований тип
У мене є протокол RequestType, і він має асоційовану модель типу, як показано нижче. public protocol RequestType: class { associatedtype Model var path: String { get set } } public extension RequestType { public func executeRequest(completionHandler: Result<Model, NSError> -> Void) { request.response(rootKeyPath: rootKeyPath) { [weak self] (response: Response<Model, NSError>) -> …

5
Як в Swift я можу оголосити змінну певного типу, яка відповідає одному або декільком протоколам?
У Swift я можу явно встановити тип змінної, оголосивши її наступним чином: var object: TYPE_NAME Якщо ми хочемо зробити крок далі і оголосити змінну, яка відповідає декільком протоколам, ми можемо використовувати protocolдекларатив: var object: protocol<ProtocolOne,ProtocolTwo>//etc Що робити, якщо я хотів би оголосити об’єкт, який відповідає одному або декільком протоколам, а …

15
Як змусити перерахування відповідати протоколу в Swift?
Документація Swift говорить про те, що класи , структури та перерахунки можуть відповідати протоколам, і я можу дістатись до точки, коли вони всі відповідають. Але я не можу змусити enum поводитися так, як приклади класу та структури : protocol ExampleProtocol { var simpleDescription: String { get set } mutating func …

4
“Фатальна помилка: масив неможливо зв’язати з Objective-C” - Чому ти взагалі намагаєшся, Свіфте?
Я оголосив протокол Swift: protocol Option { var name: String { get } } Я заявляю про декілька реалізацій цього протоколу - деякі класи, деякі перелічення. У мене є контролер перегляду з властивістю, оголошеною так: var options: [Option] = [] Коли я намагаюся встановити для цього властивості масив об'єктів, що …


9
Функція протоколу, що повертається Self
У мене є протокол P, який повертає копію об’єкта: protocol P { func copy() -> Self } і клас C, який реалізує P: class C : P { func copy() -> Self { return C() } } Однак чи я ставлю повернене значення, оскільки Selfотримую таку помилку: Неможливо перетворити вираз …

3
Чому я не можу використовувати протокол дозволу в Swift?
Я сумніваюся у протоколах Swift щодо використання var та ключових слів {get set} . З документації Apple : Якщо протокол вимагає, щоб властивість була доступною для встановлення та встановлення, ця вимога щодо властивості не може бути виконана постійною збереженою властивістю або обчислюваною властивістю лише для читання. Якщо протокол вимагає лише …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.