菜鸟教程小白 发表于 2022-12-11 22:39:44

ios - React-native 桥接与 Swift 单例自定义类


                                            <p><p>今天,我尝试在我的 Javascript 代码中使用实现单例模式的自定义 Swift 类。我已经创建了 native 模块,但今天我遇到了这个错误:“<strong> fatal error :使用未实现的初始化程序 'init()' for class</strong>”</p>

<p>我猜是因为单例模式,但我无法理解我的错误......</p>

<p>这是我的代码:</p>

<pre><code>AnalyticsTracker.swift

import Foundation
import Tracker


@objc(AnalyticsTracker)
class AnalyticsTracker: NSObject {


static let shared = AnalyticsTracker(tracker: ATInternet.sharedInstance.defaultTracker)

// MARK: -

let tracker: Tracker

// Initialization

private init(tracker: Tracker) {
    self.tracker = tracker
}

@objc
func viewScreen(screen: String) {
    self.tracker.screens.add(screen).sendView()
}

@objc
func sendTouch(clickName: String, chapter1: String, chapter2: String, chapter3: String, level2: Int) {
    let gesture = self.tracker.gestures.add(clickName, chapter1: chapter1, chapter2: chapter2, chapter3:chapter3)
    gesture.level2 = level2
    gesture.sendTouch()
}
}
</code></pre>

<p>以及将我的类(class)导出到我的 react-native 应用程序的模块:</p>

<pre><code>AnalyticsTracker.m

#import &lt;Foundation/Foundation.h&gt;
#import &lt;React/RCTBridgeModule.h&gt;

@interface RCT_EXTERN_MODULE(AnalyticsTracker, NSObject)

RCT_EXTERN_METHOD(
                  sendTouch:
                  (NSString*)clickName
                  (NSString*)chapter1
                  (NSString*)chapter2
                  (NSString*)chapter3
                  (int)level2
)

@end
</code></pre>

<p>删除导出模块后错误消失。我真的不明白这个错误是什么意思......</p>

<p>如果有人有想法,将不胜感激:) </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>问题在于 React Native 桥接机制。 AFAIK 它不支持自定义初始化。作为一种解决方法,您可以创建一个在其导出方法中使用 AnalyticsTracker.shared 的帮助器类:</p>
<pre><code>// RNAnalyticsTracker.swift

import Foundation

@objc(RNAnalyticsTracker)
class RNAnalyticsTracker: NSObject {

@objc
func viewScreen(screen: String) {
    AnalyticsTracker.shared.viewScreen(screen: screen)
}

@objc
func sendTouch(clickName: String, chapter1: String, chapter2: String, chapter3: String, level2: Int) {
    AnalyticsTracker.shared.sendTouch(clickName: clickName, chapter1: chapter1, chapter2: chapter2, chapter3: chapter3, level2: level2)
}
}
</code></pre>
<p>来源引用:<a href="https://gist.github.com/harveyconnor/7b0e778effaae302f512485c18881569" rel="noreferrer noopener nofollow">https://gist.github.com/harveyconnor/7b0e778effaae302f512485c18881569</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - React-native 桥接与 Swift 单例自定义类,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/55472700/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/55472700/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - React-native 桥接与 Swift 单例自定义类