Как получить доступ к методу класса Objective-C с языка Swift
В моем приложении Swift мне нужно получить доступ к методу класса weibo()
, как показано ниже: Objective-C
@interface Weibo : NSObject
+ (Weibo*)weibo;
@end
Я настроил заголовок моста и попробовал следующую инструкцию
let w = Weibo.weibo() as Weibo
Это не работает.
UPDATE:
Я отклонил репо и исправил эту проблему, как показано ниже.
let w = Weibo.getWeibo() as Weibo // the method has been changed.
Причина, по которой это не сработало, потому что Swift рассматривает + (Weibo*)weibo;
как конструктор удобства. Поскольку weibo
совпадает с именем класса weibo
, хотя случай отличается. Мне нужно изменить имя на getWeibo
, чтобы исправить эту проблему, чтобы поддерживать Swift.
Спасибо за каждого, кто вносит свой вклад в этот ответ. Особая благодарность @Anil и @David
Джейк
Ответы
Ответ 1
+ (Weibo*)weibo;
- метод класса вашего класса Weibo
. Вы можете получить доступ к нему быстрым способом, например
let w:Weibo = Weibo.weibo()
Но это дает мне ошибку, когда я пытался ('weibo' is unavailable: use object construction 'Weibo()'
) может быть из-за имени метода и имени класса. Когда я меняю имя метода, идет ошибка
let w:Weibo = Weibo.getWeibo() // works: method name changed
Ответ 2
То, что метод класса не является свойством.
Итак, вы получите доступ к нему, как...
let w = Weibo.weibo()
... Я думаю.
Тип будет выведен, но вы можете сделать это как...
let w:Weibo = Weibo.weibo() as Weibo
Я верю, и он все равно будет работать.
Ответ 3
У меня такая же проблема с помощью кода изменения
+(instancetype _Nonnull)manager;
вы должны изменить его следующим образом
@property(nonatomic, class, strong, readonly) CKKNetManager *_Nonnull manager;
тогда вы можете позвонить в Swift, как это
CKKNetManager.manager.get(kGetCompanyInfo, success: {[unowned self] (obj) in
self.hideEmptyView()
self.info = CKKCorpInfo.init(dictionary: obj as! [String : AnyObject])
}) {[unowned self] (errorString) in
self.showEmptyView(in: self.view, with: EmptyViewType.pageLoadFailed)
}