官方博文
首先我们知道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
网友评论