Код Swift не может видеть метод, объявленный в категории Objective C - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть очень простой класс Swift objc, из которого я хочу вызвать метод, определенный в категории класса, определенного в Objective-C.

Однако, компилятор не доволен:

.../UploadOperation.swift:25:24: error: value of type 'MyServer' has no member 'clearPendingData'
        self.server?.clearPendingData();

Когда я перемещаю объявление clearPendingData в объявление основного класса, компилятор доволен (за исключением того, что теперь я получаю предупреждения в своем коде Objective-C о реализациях метода основного класса и категории).

Вот объявление Swift, в файле UploadOperation.swift

@objc class UploadOperation: Operation {

    @objc var server: MyServer? = nil

    override init() {
        super.init()
        self.completionBlock = { [unowned self] () in
            self.server?.clearPendingData()
        }
    }
}

А вот и категория, в файле MyServer + upload.h:

#import "MyServer.h"

@class UploadOperation;

@interface MyServer (upload)
    - (void) clearPendingData;
@end

И объявление основного класса, в файле MyServer.h

@interface MyServer : NSObject
    - (MyServer *) init;
    // and a ton of stuff omitted
@end

(конечно, много нерелевантного кода опущено)

Это с Xcode 10.1.

Что дает? Спасибо

1 Ответ

0 голосов
/ 18 ноября 2018

Если вы хотите получить доступ к методам Objective-C из Swift, определенным в категории, вы должны включить заголовок категории, а также заголовок класса в свой файл моста. В этом случае включите MyServer+upload.h, а также MyServer.h. Ваша ошибка говорит о том, что вы этого не сделали. НТН

...