diff --git a/packages/playground/uts/nativeplugins/test-uniplugin/ios/src/TestModuleImpl.uts b/packages/playground/uts/nativeplugins/test-uniplugin/ios/src/TestModuleImpl.uts deleted file mode 100644 index 19f8e18816dd8ff7b78077a3b0bd479a0288480f..0000000000000000000000000000000000000000 --- a/packages/playground/uts/nativeplugins/test-uniplugin/ios/src/TestModuleImpl.uts +++ /dev/null @@ -1,28 +0,0 @@ -import "Foundation"; -// -// TestModuleImpl.swift -// libWeex -// -// Created by dcloud on 2022/6/1. -// Copyright © 2022 DCloud. All rights reserved. -// - -@objcMembers -class TestModuleImpl extends NSObject { - testAsyncFunc(option: NSDictionary, callback: UniModuleKeepAliveCallback) { - // options 为 js 端调用此方法时传递的参数 - console.log(option) - // // 可以在该方法中实现原生能力,然后通过 callback 回调到 js - // - // // 回调方法,传递参数给 js 端 注:只支持返回 String 或 NSDictionary (map) 类型 - // 第一个参数为回传给js端的数据,第二个参数为标识,表示该回调方法是否支持多次调用,如果原生端需要多次回调js端则第二个参数传 YES; - callback('success', false) - } - - /// 同步方法(注:同步方法会在 js 线程执行) - /// @param options js 端调用方法时传递的参数 - testSyncFunc(option: NSDictionary): string { - console.log(option) - return '' - } -} diff --git a/packages/playground/uts/nativeplugins/test-uniplugin/ios/src/TestSwiftComponent.uts b/packages/playground/uts/nativeplugins/test-uniplugin/ios/src/TestSwiftComponent.uts new file mode 100644 index 0000000000000000000000000000000000000000..baefbb7a62a7daba3f438d7ee61d190fdb6f4c4a --- /dev/null +++ b/packages/playground/uts/nativeplugins/test-uniplugin/ios/src/TestSwiftComponent.uts @@ -0,0 +1,83 @@ +// +// TestSwiftComponent.swift +// DCTestSwiftPlugin +// +// Created by Dcloud-XHY on 2022/6/28. +// + +import 'UIKit' +import 'MapKit' + +// 必须添加 @objc(类名),编译器才会生成对应的 oc 方法 +@objc(TestSwiftComponent) +class TestSwiftComponent implements DCUniComponent, MKMapViewDelegate { + mapLoadedEvent = false + showTraffic = false + mapView?: MKMapView = null + + // 初始化方法 + override onCreateComponent( + ref: String, + type: String, + styles: [AnyHashable: Any], + attributes: [AnyHashable: Any], + events: [Any], + uniInstance: DCUniSDKInstance + ) { + // NSDictionary 转换为 swift 的 [AnyHashable : Any] ,解析参数需要使用 [AnyHashable("key")] + this.showTraffic = DCUniConvert.bool( + attributes[AnyHashable('showTraffic')] ?? false + ) + } + + override loadView(): UIView { + this.mapView = MKMapView.init() + return this.mapView! + } + + override viewDidLoad() { + this.mapView!.delegate = this + if (this.showTraffic) { + this.mapView.showsTraffic = true + } + } + + // 监听属性变化方法 + override updateAttributes(attributes: [AnyHashable: Any] =new Dictionary()) { + if (attributes['showsTraffic'] != null) { + this.showTraffic = DCUniConvert.bool( + attributes[AnyHashable('showsTraffic')]! + ) + this.mapView.showsTraffic = this.showTraffic + } + } + + // 监听注册事件方法 + override addEvent(eventName: String) { + if (eventName == 'mapLoaded') { + this.mapLoadedEvent = true + } + } + + override removeEvent(eventName: String) { + if (eventName == 'mapLoaded') { + this.mapLoadedEvent = false + } + } + + @objc public static wx_export_method_0(): String { + return 'focus:' + } + + @objc focus(options: NSDictionary) { + print(options) + } + + // MARK: - MKMapViewDelegate + mapViewDidFinishLoadingMap(mapView: MKMapView) { + if (this.mapLoadedEvent) { + // 回调 event 事件 + this.fireEvent('mapLoaded', { mapLoaded: 'success' }) + } + } +} diff --git a/packages/playground/uts/nativeplugins/test-uniplugin/ios/src/TestSwiftModule.uts b/packages/playground/uts/nativeplugins/test-uniplugin/ios/src/TestSwiftModule.uts new file mode 100644 index 0000000000000000000000000000000000000000..b2ef25ea23719fd8cf103e4bb328b74a9f2a01b4 --- /dev/null +++ b/packages/playground/uts/nativeplugins/test-uniplugin/ios/src/TestSwiftModule.uts @@ -0,0 +1,66 @@ +// +// TestSwiftModule.swift +// DCTestSwiftPlugin +// +// Created by Dcloud-XHY on 2022/6/27. +// + +//import UIKit + +// 必须添加 @objc(类名),编译器才会生成对应的 oc 方法 +@objc(TestSwiftModule) +class TestSwiftModule extends DCUniModule { + + // 暴露异步方法供js调用: + // 1.必须添加 @objc 前缀, + // 2.使用 public static 静态方法 + // 3.方法名称必须是以 wx_export_method_ 开头,后面随意拼接一个字符保证唯一性即可 + // 4.方法返回实例方法的名称 + // 注意点:swift 方法名称转换为 oc 方法名称时系统会自动将首个参数用 with 拼接到方法名中作为方法名的一部分 如下实例 + // testAsyncFunc(options:callback:) -> testAsyncFuncWithOptions:callback + // js 中调用方法 testAsyncFuncWithOptions(options,callabck) + // 可以在参数前面加上 _ 让编译器忽略拼接参数 + @objc public static wx_export_method_0() : String { + return "testAsyncFunc::" + } + + // 需要暴露的实例方法 + // 1.必须添加 @objc 前缀 + // 2.首个参数需要添加 _ 忽略外部参数 其他参数可选 + @objc testAsyncFunc(options: NSDictionary,callback?: UniModuleKeepAliveCallback) { + print(options) + + if (callback != null) { + callback!("success",false) + } + } + + // 暴露同步方法供js调用: + // 1.必须添加 @objc 前缀, + // 2.使用 public static 静态方法 + // 3.方法名称必须是以 wx_export_method_sync_ 开头,后面随意拼接一个字符保证唯一性即可 + // 4.方法返回实例方法的名称 + // 注意点:swift 方法名称转换为 oc 方法名称时系统会自动将首个参数名首字符大写然后用 with 拼接到方法名中作为方法名的一部分 如下实例 + // testSyncFunc(options:) -> testSyncFuncWithOptions: + // js 中调用方法 var value = testSyncFuncWithOptions(options) + @objc public static wx_export_method_sync_0() : String { + return "testSyncFunc:" + } + + // 需要暴露的实例方法 + // 1.必须添加 @objc 前缀 + // 2.首个参数需要添加 _ 忽略外部参数 + @objc testSyncFunc(options: NSDictionary) : String { + + print(options); + + // 暴露方法内部可以调用其他 swift 方法 + return getSomeString(); + } + + + // 不需要直接暴露给js的方法不需要添加前缀 + getSomeString() : String { + return "getSomeString success" + } +} diff --git a/packages/playground/uts/unpackage/nativeplugins/test-uniplugin-ios/ios/src/TestModuleImpl.swift b/packages/playground/uts/unpackage/nativeplugins/test-uniplugin-ios/ios/src/TestModuleImpl.swift deleted file mode 100644 index 79ef525a155f20939ca3a89f710e65f4e6a5a8d8..0000000000000000000000000000000000000000 --- a/packages/playground/uts/unpackage/nativeplugins/test-uniplugin-ios/ios/src/TestModuleImpl.swift +++ /dev/null @@ -1,12 +0,0 @@ -import Foundation; -@objcMembers -class TestModuleImpl : NSObject { - func testAsyncFunc(_ option: NSDictionary, _ callback: UniModuleKeepAliveCallback) { - console.log(option); - callback("success", false); - } - func testSyncFunc(_ option: NSDictionary) -> String { - console.log(option); - return ""; - } -} diff --git a/packages/playground/uts/unpackage/nativeplugins/test-uniplugin-ios/ios/src/TestSwiftComponent.swift b/packages/playground/uts/unpackage/nativeplugins/test-uniplugin-ios/ios/src/TestSwiftComponent.swift new file mode 100644 index 0000000000000000000000000000000000000000..c47cc825904472c0990248b4b610944b4771b2ec --- /dev/null +++ b/packages/playground/uts/unpackage/nativeplugins/test-uniplugin-ios/ios/src/TestSwiftComponent.swift @@ -0,0 +1,52 @@ +import UIKit; +import MapKit; +@objc(TestSwiftComponent) +class TestSwiftComponent : DCUniComponent, MKMapViewDelegate { + var mapLoadedEvent = false; + var showTraffic = false; + var mapView: MKMapView? = nil; + override func onCreateComponent(_ ref: String, _ type: String, _ styles: [AnyHashable: Any], _ attributes: [AnyHashable: Any], _ events: [Any], _ uniInstance: DCUniSDKInstance) { + self.showTraffic = DCUniConvert.bool(attributes[AnyHashable("showTraffic")] ?? false); + } + override func loadView() -> UIView { + self.mapView = MKMapView.init(); + return self.mapView!; + } + override func viewDidLoad() { + self.mapView!.delegate = self; + if (self.showTraffic) { + self.mapView.showsTraffic = true; + } + } + override func updateAttributes(_ attributes: [AnyHashable: Any] = Dictionary()) { + if (attributes["showsTraffic"] != nil) { + self.showTraffic = DCUniConvert.bool(attributes[AnyHashable("showsTraffic")]!); + self.mapView.showsTraffic = self.showTraffic; + } + } + override func addEvent(_ eventName: String) { + if (eventName == "mapLoaded") { + self.mapLoadedEvent = true; + } + } + override func removeEvent(_ eventName: String) { + if (eventName == "mapLoaded") { + self.mapLoadedEvent = false; + } + } + @objc + public static func wx_export_method_0() -> String { + return "focus:"; + } + @objc + func focus(_ options: NSDictionary) { + print(options); + } + func mapViewDidFinishLoadingMap(_ mapView: MKMapView) { + if (self.mapLoadedEvent) { + self.fireEvent("mapLoaded", { + mapLoaded: "success" + }); + } + } +} diff --git a/packages/playground/uts/unpackage/nativeplugins/test-uniplugin-ios/ios/src/TestSwiftModule.swift b/packages/playground/uts/unpackage/nativeplugins/test-uniplugin-ios/ios/src/TestSwiftModule.swift new file mode 100644 index 0000000000000000000000000000000000000000..9287b118c1fa285242f1e4d541ded40dac8be936 --- /dev/null +++ b/packages/playground/uts/unpackage/nativeplugins/test-uniplugin-ios/ios/src/TestSwiftModule.swift @@ -0,0 +1,26 @@ +@objc(TestSwiftModule) +class TestSwiftModule : DCUniModule { + @objc + public static func wx_export_method_0() -> String { + return "testAsyncFunc::"; + } + @objc + func testAsyncFunc(_ options: NSDictionary, _ callback: UniModuleKeepAliveCallback?) { + print(options); + if (callback != nil) { + callback!("success", false); + } + } + @objc + public static func wx_export_method_sync_0() -> String { + return "testSyncFunc:"; + } + @objc + func testSyncFunc(_ options: NSDictionary) -> String { + print(options); + return getSomeString(); + } + func getSomeString() -> String { + return "getSomeString success"; + } +} diff --git a/packages/uts-darwin-arm64/uts.darwin-arm64.node b/packages/uts-darwin-arm64/uts.darwin-arm64.node index 274f87c9bd74700183f2c92c47b41555b7a80513..4690a2f910ca7e45134bdadea4ddf1250c32cf6f 100755 Binary files a/packages/uts-darwin-arm64/uts.darwin-arm64.node and b/packages/uts-darwin-arm64/uts.darwin-arm64.node differ diff --git a/packages/uts-darwin-x64/uts.darwin-x64.node b/packages/uts-darwin-x64/uts.darwin-x64.node index ab3853e7d46a5c07027b9df77d769f674e87353e..83e384e6d1227c93005553ca1e7550273eb5fab2 100755 Binary files a/packages/uts-darwin-x64/uts.darwin-x64.node and b/packages/uts-darwin-x64/uts.darwin-x64.node differ diff --git a/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node b/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node index 9a929865fea7a5373ed75dd576708cfa5fa22eda..dc6bffc6119999322d9b43c4ffb0013338e11502 100644 Binary files a/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node and b/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node differ diff --git a/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node b/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node index 84248893a2c058554b7f6a1e1b442f7784a11acc..ccd4b17957ae4b54f847bdcf1c536cb552a448ab 100644 Binary files a/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node and b/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node differ