У меня есть это перечисление в Swift SDK, и мне нужно распечатать description как отладочное сообщение.
@objc public enum ResultCode : UInt16 {
case noError = 0x0000
@objc public func description() -> String {
switch self {
case .noError:
return "No Error"
}
}
}
description нельзя вызвать в Objc следующим образом:
[taskManager.sendRequest requestWithCompletion:^(ResultCode resultCode) {
NSString *resultCodeDescription = [resultCode description];//Bad receiver type 'ResultCode' (aka 'enum ResultCode')
NSLog(@"Result code description: %@", resultCodeDescription);
}];
Я знаю, что добавление расширения ResultCode в файл Swift и функции @objc — это решение, но я предпочитаю решать эту проблему в файле objc, как мне к этому подойти?
Лол, этот код исходит от gpt, и я еще не подтвердил, извини.





@objc для соединения перечисления Swift с перечислением Objective-c поддерживает только целочисленные типы в качестве необработанного значения.
@objc public func description() -> String { ... }
Приведенный выше код выдаст ошибку во время компиляции:
@objc можно использовать только с членами классов, протоколами @objc и конкретными расширениями классов.
Вы можете попробовать этот подход, определив класс в Swift, чтобы добавить аннотацию objc:
@objc class ResultCodeReader: NSObject {
@objc static func getDescription(from resultCode: ResultCode) -> String {
resultCode.description()
}
}
Тогда вы сможете получить описание ResultCode из Objective-c:
NSString *desc = [ResultCodeReader getDescriptionFrom:ResultCodeNoError];
Это невозможно. Вы понимаете, что
@objc public func description() -> Stringдаже не компилируется?