Как получить доступ к методу класса 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)
    }