gpt4 book ai didi

ios - Swift 4.2 升级后将 Swift 类桥接到 React Native

转载 作者:行者123 更新时间:2023-11-29 05:29:39 24 4
gpt4 key购买 nike

在 Swift 3.0 中,我有以下 Swift 类

import Foundation

@objc(NetworkManager)
class NetworkManager: NSObject {


init(...) {
...
}


deinit {
...
}

func isConnected(resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
...
}
}

还有下面的桥:

#import <Foundation/Foundation.h>

#import <React/RCTBridgeModule.h>

@interface RCT_EXTERN_MODULE(NetworkManager, NSObject)
_RCT_EXTERN_REMAP_METHOD(isConnected, isConnectedWithResolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject, NO)
@end

升级到 Swift 4.2 后,开始失败,并出现 isConnnectedWithResolver:rejecter is not a recognizer Objective-C method.

环顾四周后发现这个问题:Got "is not a recognized Objective-C method" when bridging Swift to React-Native ,此代码示例:https://github.com/bigali/StringToHash/blob/master/ios/StringToHash/StringToHash.m

我已将其更改为:

import Foundation

@objc(NetworkManager)
class NetworkManager: NSObject {


init(...) {
...
}


deinit {
...
}

func isConnected(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
...
}
}

和:

   #import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>

@interface RCT_EXTERN_MODULE(NetworkManager, NSObject)
_RCT_EXTERN_REMAP_METHOD(isConnected, isConnected:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject, NO)
@end

这只会将错误消息中的函数名称更改为:

isConnnectedWithResolver:rejecter is not a recognized Objective-C method.

是什么导致了这个问题?为什么其他问题中概述的解决方案不起作用?我该如何解决这个问题?

最佳答案

您应该导入 eventEmitter。将其放入 header 桥文件和 Objective-C 文件中

#import "React/RCTEventEmitter.h"

关于ios - Swift 4.2 升级后将 Swift 类桥接到 React Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57776976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com