Swift学习

Swift: 分别开放不同的接口给OC和Swift

2019-12-06  本文已影响0人  韦弦Zhy
最近使用Swift编写Framework,遇到有一些方法想单独开放给OC,另一些单独开放给Swift使用,之所以有这样的想法都是归于Swift和OC存在一定的差异性,比如强大的Swift的枚举

下面用一个登陆方法举例:

    typealias callBack = (_ msg: String?, _ error: Error?) -> Void

    @objc func loginBy(mobile: String, mobileArea: String, password: String, callBack: callBack) 

    @objc func loginBy(email: String, password: String, callBack: callBack) 

因为手机登陆(需要国家码(中国 +86))邮箱登陆的差异性,只能开放出去两个接口

    enum LoginType {
        case mobile(_ mobile: String, mobileArea: String, password: String, callBack: callBack)
        case email(_ email: String, password: String, callBack: callBack)
    }

统一接口:

    func login(by loginType:LoginType)

这样子,我们就把接口统一并且简化了,但是这个只能在Swift中使用,现在的问题是,现在在Swift中有三个接口:

swift调用
可以看到调用的时候,新的接口确实更加简洁了,虽然最终传参还是一样长,但是毕竟统一且好看不少
这时候我的问题来了,怎么在OC只暴露上面两个接口(默认就是这样),Swift只暴露单个统一的login接口(现在是三个),研究的半天,最终使用了一个很神奇的关键字: @available
    @available(swift 999.0)
    @objc func loginBy(mobile: String, mobileArea: String, password: String, callBack: callBack) 
    
    @available(swift 999.0)
    @objc func loginBy(email: String, password: String, callBack: callBack) 

有点取巧哈,本来·@available(swift 4.2)·是用来做Swift兼容的...这样之后就达到预期了。

属性给OC和Swift设置不一样的名字
    @objc(shareInstance)
    public static let shared = ZYTestManager()
上一篇下一篇

猜你喜欢

热点阅读