[英]Swift bridging header not exporting React Native types
我正在嘗試使用 Swift 為 React Native 應用程序創建本機 (iOS) 模塊。 我想在模塊上公開一個返回承諾的方法,使用RCTPromiseResolveBlock
和RCTPromiseRejectBlock
類型的函數,這兩個函數都在 React Native 的RCTBridgeModule.h
標頭中聲明。 但是,對於這兩種類型,我的構建失敗並顯示消息“使用未聲明的類型...”。
我已經為另一個目的創建了一個橋接頭(自動使用 Xcode),所以我相信導入React/RCTBridgeModule.h
是我需要提供上述類型的全部內容。 大概我配置錯誤,因為這不能解決問題。 我試過建立一個新項目,一切都按預期工作,但我似乎找不到會導致我的項目構建失敗的差異。
一些相關的配置細節:
<ProjectName>-Bridging-Header.h
並存儲在我的源目錄中。 我移動了它以確認 Xcode 正在找到它(當它不在正確的位置時,構建會以不同的方式失敗)。#import <React/RCTBridgeModule.h>
<ProjectName>-Bridging-Header.h
被配置為“Objective-C Bridging Header”react-native link
,一個使用 Git 子模塊)node_modules
並刪除 Xcode 派生數據,但都沒有效果。我的項目是配置錯誤還是我錯過了一些重要的東西?
本教程非常擅長解釋如何使用 Swift 設置本機模塊。 它將所有內容分解為步驟,並且很容易遵循。
https://teabreak.e-spres-oh.com/swift-in-react-native-the-ultimate-guide-part-1-modules-9bb8d054db03
顯然,您要執行的步驟是第 6 步。
這是一個代碼示例。 它與上面鏈接中所做的非常相似。 您的橋接頭應如下所示:
// <ProjectName>-Bridging-Header.h
#import "React/RCTBridgeModule.h"
#import "React/RCTEventEmitter.h"
你應該有名為ModuleName.m
和ModuleName.swift
文件。
// ModuleName.m
#import "React/RCTBridgeModule.h"
#import "React/RCTEventEmitter.h"
@interface RCT_EXTERN_MODULE(ModuleName, NSObject)
// this is how we expose the promise to the javascript side.
RCT_EXTERN_METHOD(functionWithPromise: (RCTPromiseResolveBlock)resolve rejecter: (RCTPromiseRejectBlock)reject)
@end
// ModuleName.swift
@objc(ModuleName)
class ModuleName: NSObject {
@objc
func constantsToExport() -> [AnyHashable : Any]! {
return ["projectName": "ModuleName"]
}
@objc
static func requiresMainQueueSetup() -> Bool {
return true
}
@objc
func functionWithPromise(
_ resolve: RCTPromiseResolveBlock,
rejecter reject: RCTPromiseRejectBlock
) -> Void {
if (//something bad happens) {
let error = NSError(domain: "", code: 200, userInfo: nil)
reject("ERROR_FOUND", "failure", error)
} else {
resolve("success")
}
}
}
然后在 Javascript 端,您可以像這樣訪問它:
import { NativeModules } from 'react-native'
NativeModules.Counter.functionWithPromise()
.then(res => console.log(res))
.catch(e => console.log(e.message, e.code))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.