创建swift 版本的 cordova 插件

官方博文
首先我们知道cordova 一直用的是objective-c的语言, 所以一般我们创建插件时用的语言也objective-c. 但从swift 出来后, 苹果也在快速的更新, 它应该会慢慢成为以后的趋势, 所以我们也要关注下swift 怎么创建cordova 插件.
如果想了解objective-c创建cordova 插件,可以看我的另一篇文章: 谈谈cordova 创建plugin,相信里面说的很详细, 希望能帮助到你.

添加桥接文件

我们知道, swift 调用oc的代码是需要在桥接文件在导入oc的头文件, 这样swift 就可以全局使用.
所以我们首要任务是创建一个桥接头文件, 可以借助一个第三方的插件
cordova-plugin-add-swift-support
可以执行

cordova plugin add cordova-plugin-add-swift-support --save
  • 执行完这个后, 会帮你创建好桥接文件, 而且在里面导入了: #import <Cordova/CDV.h>, 这样就可以在swift 文件中全局使用cordova 相关的东西
  • 如果你是创建自己的swift 插件, 则可以在plugin.xml 中写上依赖
<dependency id="cordova-plugin-add-swift-support" version="1.7.2"/>
  • 默认情况下,添加的是Swift 3,如果是Swift(2.3),可以在项目config.xml内部的<platform name="ios">内配置为:
<preference name="UsezSwiftLanguageVersion" value="true" />
  • 也可以在项目内的config.xml<platform name="ios">指定swift版本:
<preference name="UseSwiftLanguageVersion" value="4" />

准备编写.swift 文件

swift 文件在plugin.xml的导入方式类似这样:我的另一篇文章: 谈谈cordova 创建plugin会详细介绍, 其他东西和oc插件差不多

<source-file src="src/ios/ModusEchoSwift.swift" />

swift 文件

import UIKit

@objc(ModusEchoSwift) class ModusEchoSwift : CDVPlugin {
    
 @objc(openUrl:) func openUrl(_ command: CDVInvokedUrlCommand) {
        guard let params = command.argument(at: 0) as? [String: Any] else {return}
        let result: [String: String] = [:]
        let pluginResult = CDVPluginResult(
            status: CDVCommandStatus_OK,
            messageAs: result
        )
        guard let url = params["url"] as? String else {return}
        // do something ......
        self.commandDelegate!.send(
            pluginResult,
            callbackId: command.callbackId
        )
    }
    
}
/*
这里主要说几点注意的, 我们要想swift的类可以被cordova调用
1. swift类要继承NSObject , 这里继承CDVPlugin,它最终就是继承NSObject.
2. 类名前面要加上 @objc(类名) 
3. 提供给cordova 帮你调用的方法名前面也必须加上:  @objc(方法名:) , 注意方法后面一定有 :  , 因为一定会有参数, 在OC中 : 也是方法名的一部分. 关于这一点,swift 3.0后的就建议加上, swift2.3好像可以不用加
*/

到这里, 所写的swift 文件就能被cordova正常调用了,如果是想看关于swift与objective-c 的混合语言打包成framework的话, 请看我的另一篇文章:关于打包 swift 与OC 兼容的framework

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,039评论 3 119
  • 这几天休班,没有带孩子出去旅行,但是在附近也是玩的很开心,这几天福轩很听话,我给他布置的任务都能完成,感觉这一...
    轩轩皓皓阅读 1,274评论 0 0
  • 很奇怪啊,有房子就是有家吗? 我没有钱,所以没有买房子,没有房子是因为我没有钱,好吧,好像杠上了,哈哈 每天下班的...
    棠梨煎雪_71a3阅读 1,404评论 0 0
  • 人,尤其是,既没有个人优势,也没有社会背景的人,理应学会在被拒绝中成长,否则,难得微笑着过完一生。 ...
    清风明月冯耀杰阅读 2,755评论 0 4
  • 朋友是一个很有魅力的女生,她似乎天生自带一种神奇的力量,会让每一个接近她的人都觉得预见她是多么幸运的一件事。她实...
    木念心阅读 3,093评论 0 1