您当前的位置: 首页 >  swift

反其道而行之:ObjC调用Swift功能入门

发布时间:2018-08-21 20:30:30 ,浏览量:0

大家可能对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!!! 感谢观赏.

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.2523s