@objc'仅可应用于类的扩展,从swift到目标c调用扩展方法

迪普蒂·拉加夫(Deepti Raghav)

我正在创建像

@objc extension String {
static func className(_ aClass: AnyClass) -> String {
    return NSStringFromClass(aClass).components(separatedBy: ".").last!
}
    func localize() -> String
{
    return NSLocalizedString(self, comment: "")
}}

我正在像这样迅速使用

btnReferencePhoto.setTitle("ADD REFERENCE PHOTO".localize(), for: .normal)

我想在目标c中使用它,但是我可以访问目标c文件中的本地化方法,因为我在字符串扩展名中添加了@objc,但是它给出了错误

在此处输入图片说明

我也试过

在此处输入图片说明

rmaddy

您不能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];

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章