Weex 使用 Swift 擴(kuò)展 IOS 能力

2023-12-28 15:47 更新

Swift和Objective-C 混編

參考完整 例子

使用 Swift 進(jìn)行 module 擴(kuò)展

因?yàn)?module 暴露 method 是通過Objective-C宏來做的,調(diào)用的時候是通過反射,所以Swift擴(kuò)展 module 通過extensionObjective-C的類。

  • 新建 WXSwiftTestModule.h/mWXSwiftTestModule.swift文件, 在新建Swift文件的時候會提示 img 選擇 Create Bridging Header, 因?yàn)槲覀円?Swift 中訪問 Objective-C 的一些類,正是通過這個 header暴露 OC 的類給 Swift,header 格式為 yourTarget-Bridging-Header.h,我這里創(chuàng)建完header文件名稱為:WeexDemo-Bridging-Header.h

  • WXSwiftTestModule.h/m中實(shí)現(xiàn)

    • 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
      

      路徑具體需要根據(jù)自己工程而定

      #import "WXSwiftTestModule.h"
      #import "WeexDemo-Swift.h" // Swift類和方法 被 `Objective-C` 識別需要導(dǎo)入
      
      @implementation WXSwiftTestModule
      #pragma clang diagnostic push //關(guān)閉unknow selector的warrning
      #pragma clang diagnostic ignored "-Wundeclared-selector"
      
      WX_EXPORT_METHOD(@selector(printSome:callback:)) //Swift 中定義的方法,XCode 轉(zhuǎn)換成的最終的方法名稱,在`WeexDemo-Swift.h`里面查看
      
      #pragma clang diagnostic pop
      
      @end
      
  • Swift 中實(shí)現(xiàn) 擴(kuò)展 OC 的類 WXSwiftTestModule,增加了一個方法,這個方法就是我們要暴露出來,在 js 中可以調(diào)到的

    • WXSwiftTestModule.swift

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

      WXSwiftTestModuleWXModuleCallback 因?yàn)槭?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 開發(fā)的簡單的 module 已經(jīng)完成

    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>
      
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號