#ios #objective-c #swift
#iOS #objective-c #swift
Вопрос:
У меня есть метод
public func presentSomeView(with viewId: String? = nil, from viewController: UIViewController, completion: ((UIViewController) -> ())? = nil)
Я пытаюсь, чтобы Objective-C API был
presentSomeViewWithId: from: completion:
Вместо этого по умолчанию:
presentSomeViewWith: from: completion:
Чтобы попытаться исправить это, я написал:
@objc(presentSomeViewWithId:from:completion:)
public func presentSomeView(with viewId: String? = nil, from viewController: UIViewController, completion: ((UIViewController) -> ())? = nil)
Xcode выдает следующую ошибку «Исправить»:
Objective-C method 'presentSomeViewWithId:from:completion:' provided by method 'presentSomeView(with:from:completion:)' does not match the requirement's selector ('presentSomeViewWith:from:completion:')
Replace 'presentSomeViewWithId:from:completion:' with 'presentSomeViewWith:from:completion:'
Чего мне здесь не хватает? Я искал везде, и по всем предложениям это должно сработать.
Комментарии:
1. Что, если вместо этого вы скажете
WithID
(обратите внимание на заглавные буквы)?2. Вы видите ошибку в объявлении или при попытке вызвать функцию из файла Objective-C? Я вставил объявление в файл Swift и не получил ошибку.
3. Я не могу воспроизвести это в Xcode 10.1 / Swift 4.2.
4. Сообщение об ошибке заставляет меня задуматься, является ли этот метод частью реализации протокола. Так ли это? Если это так, и если протокол является
@objc
, селекторы методов будут ограничены протоколом, и вы не сможете их изменить.5. Оказывается, методы БЫЛИ частью протокола, и мне нужно было переименовать их там. Проблема решена