版权声明:大熊猫猪·侯佩原创或翻译作品.谢绝转载! hopy https://blog.csdn.net/mydo/article/details/81914034
大家可能对Swift如何调用ObjC中的方法已经很熟悉了,所以这个不细表了.
这篇博文中本猫却反其道而行之,给大家介绍下如何实现:ObjC调用Swift中的功能.
现举一栗!
fileprivate let resBundleName = "HyCommonRes"
class ResBundle:Bundle{
@objc static var bundle:ResBundle = ResBundle()
private init(){
let resBundlePath = Bundle.main.path(forResource: resBundleName, ofType: "bundle")!
super.init(path: resBundlePath)!
}
}
func hyLocalizedString(key:String,comment:String="")->String{
return NSLocalizedString(key, tableName: "HyCommon", bundle: ResBundle.bundle, value: "", comment: comment)
}
我们的最终目的是在ObjC中调用hyLocalizedString()方法,在swift中这轻而易举:
let myString = hyLocalizedString(key:"myKey")
但遗憾的是因为hyLocalizedString()是一个全局方法,无法直接在ObjC中被发现,所以我们得把它变成ResBundle的实例方法,在ResBundle中添加同名方法:
@objc func hyLocalizedString(key:String,comment:String="")->String{
return NSLocalizedString(key, tableName: "HyCommon", bundle: ResBundle.bundle, value: "", comment: comment)
}
注意必须要加@objc前缀.
打开x.m文件,在开头导入桥接文件,名称为项目名-Swift.h:
#import "ProjecgName-Swift.h"
这个文件是Xcode为我们生成的,没法在磁盘上找到对应文件.
下面就是久违了的调用代码:
NSString *cancelString = [[ResBundle bundle] hyLocalizedStringWithKey:@"CancelString" comment:@""];
[btn setTitle:cancelString forState:UIControlStateNormal];
可以看到,ObjC没有诸如Swift中方法默认参数值的概念,所以这里必须输入comment实参,即使你根本不鸟它到底是神马…
That’s all!!! 感谢观赏.