Вы не можете использовать String
в Objective-C.Структуры Swift нельзя использовать в Objective-C.
Одним из решений является отражение вашего расширения String в расширении NSString.
extension String {
static func className(_ aClass: AnyClass) -> String {
return NSStringFromClass(aClass).components(separatedBy: ".").last!
}
func localize() -> String {
return NSLocalizedString(self, comment: "")
}
}
@objc extension NSString {
static func className(_ aClass: AnyClass) -> NSString {
let res = String.className(aClass)
return res as NSString
}
func localize() -> NSString {
let str = self as String
return str.localize() as NSString
}
}
Расширение NSString вызывает реализацию расширения String, поэтомуВы не реплицируете функциональность, просто API.
Теперь в вашем коде Objective-C вы можете сделать что-то вроде:
NSString *name = [NSString className:[SomeObjectiveCClass class]];
NSLog(@"name = %@", name);
NSString *localized = [@"test" localize];