@objc' 只能应用于 class 的扩展,调用从 swift 到 objective c 的扩展方法
@objc' can only be applied to an extension of a class , calling extension method from swift to objective c
我正在创建类似
的字符串扩展
@objc extension String {
static func className(_ aClass: AnyClass) -> String {
return NSStringFromClass(aClass).components(separatedBy: ".").last!
}
func localize() -> String
{
return NSLocalizedString(self, comment: "")
}}
我在 swift 中使用它,就像
btnReferencePhoto.setTitle("ADD REFERENCE PHOTO".localize(), for: .normal)
我想在objective c中使用它
但我可以访问 objective c 文件中的本地化方法
为此,我在字符串扩展名中添加了 @objc,但它给出了错误
我也试过了
您不能在 Objective-C 中使用 String
。 Swift 结构不能用于 Objective-C.
一种解决方案是在 NSString 的扩展中镜像您的 String 扩展。
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];
我正在创建类似
的字符串扩展@objc extension String {
static func className(_ aClass: AnyClass) -> String {
return NSStringFromClass(aClass).components(separatedBy: ".").last!
}
func localize() -> String
{
return NSLocalizedString(self, comment: "")
}}
我在 swift 中使用它,就像
btnReferencePhoto.setTitle("ADD REFERENCE PHOTO".localize(), for: .normal)
我想在objective c中使用它 但我可以访问 objective c 文件中的本地化方法 为此,我在字符串扩展名中添加了 @objc,但它给出了错误
我也试过了
您不能在 Objective-C 中使用 String
。 Swift 结构不能用于 Objective-C.
一种解决方案是在 NSString 的扩展中镜像您的 String 扩展。
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];