随笔 - 2649  文章 - 2452  评论 - 0  阅读 - 80424

使用 Swift 扩展 Weex

使用 Swift 扩展 Weex

Swift和Objective-C 混编

参考完整 例子

#使用 Swift 进行 module 扩展

因为 module 暴露 method 是通过Objective-C宏来做的,调用的时候是通过反射,所以Swift扩展 module 通过extension``Objective-C的类。

  • 新建 WXSwiftTestModule.h/mWXSwiftTestModule.swift文件, 在新建Swift文件的时候会提示 img 选择 Create Bridging Header, 因为我们要在 Swift 中访问 Objective-C 的一些类,正是通过这个 header暴露 OC 的类给 Swift,header 格式为 yourTarget-Bridging-Header.h,我这里创建完header文件名称为:WeexDemo-Bridging-Header.h

  • WXSwiftTestModule.h/m中实现

    • WXSwiftTestModule.h 中

      #import <Foundation/Foundation.h>
      #import <WeexSDK/WeexSDK.h>
      
      @interface WXSwiftTestModule : NSObject <WXModuleProtocol>
      
      @end
      
    • WXSwiftTestModule.m 中

      WeexDemo-Swift.h 这个文件需要编译一下才可以搜索到,具体的路径

      weex/ios/playground/DerivedData/WeexDemo/Build/Intermediates/WeexDemo.build/Debug-iphonesimulator/WeexDemo.build/DerivedSources/WeexDemo-Swift.h
      

      路径具体需要根据自己工程而定

      #import "WXSwiftTestModule.h"
      #import "WeexDemo-Swift.h" // Swift类和方法 被 `Objective-C` 识别需要导入
      
      @implementation WXSwiftTestModule
      #pragma clang diagnostic push //关闭unknow selector的warrning
      #pragma clang diagnostic ignored "-Wundeclared-selector"
      
      WX_EXPORT_METHOD(@selector(printSome:callback:)) //Swift 中定义的方法,XCode 转换成的最终的方法名称,在`WeexDemo-Swift.h`里面查看
      
      #pragma clang diagnostic pop
      
      @end
      
  • Swift 中实现 扩展 OC 的类 WXSwiftTestModule,增加了一个方法,这个方法就是我们要暴露出来,在 js 中可以调到的

    • WXSwiftTestModule.swift

      import Foundation
      public extension WXSwiftTestModule {
        @objc(printSome:callback:)
        public func printSome(someThing:String, callback:WXModuleCallback) {
          print(someThing)
          callback(someThing)
        }
      }
      

      WXSwiftTestModuleWXModuleCallback 因为是 OC 的,需要在 WeexDemo-Bridging-Header 中暴露。

      注意:请在 Swift 文件中为方法添加 @objc 修饰符,避免找不到方法的报错。

    • WeexDemo-Bridging-Header.h中

      //
      //  Use this file to import your target's public headers that you would like to expose to Swift.
      //
      #import "WXSwiftTestModule.h"
      #import "WeexSDK.h"
      

      至此这个使用 Swift 开发的简单的 module 已经完成

    #module 使用

    • 注册 module

      [WXSDKEngine registerModule:@"swifter" withClass:[WXSwiftTestModule class]];
      
    • 前端脚本中用法

      <template>
        <text>Swift Module</text>
      </template>
      
      <script>
        module.exports = {
          ready: function() {
            var swifter = weex.require('swifter');
            swifter.printSome("https://www.taobao.com",function(param){
              nativeLog(param);
            });
          }
        };
      </script>
      
posted on   AtlasLapetos  阅读(10)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示