创建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 , 这样就可以在swift 文件中全局使用cordova 相关的东西
  • 如果你是创建自己的swift 插件, 则可以在plugin.xml 中写上依赖

  • 默认情况下,添加的是Swift 3,如果是Swift(2.3),可以在项目config.xml内部的内配置为:

  • 也可以在项目内的config.xml指定swift版本:

准备编写.swift 文件

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


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

你可能感兴趣的:(创建swift 版本的 cordova 插件)