ios - React-native 桥接与 Swift 单例自定义类
问题描述
今天,我尝试在我的 Javascript 代码中使用实现单例模式的自定义 Swift 类。我已经创建了本机模块,但今天我遇到了这个错误:“致命错误:使用未实现的初始化程序 'init()' for class ”
我想这是因为单例模式,但我无法理解我的错误......
这是我的代码:
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()
}
}
以及将我的课程导出到我的 react-native 应用程序的模块:
AnalyticsTracker.m
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
@interface RCT_EXTERN_MODULE(AnalyticsTracker, NSObject)
RCT_EXTERN_METHOD(
sendTouch:
(NSString*)clickName
(NSString*)chapter1
(NSString*)chapter2
(NSString*)chapter3
(int)level2
)
@end
当我删除导出模块时,错误消失了。我真的不明白错误是什么意思......
如果有人有想法,将不胜感激:)
解决方案
问题在于 React Native 桥接机制。AFAIK 它不支持自定义初始化。作为一种解决方法,您可以创建一个辅助类,在其导出的方法中使用 AnalyticsTracker.shared:
// 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)
}
}
来源参考:https ://gist.github.com/harveyconnor/7b0e778effaae302f512485c18881569
推荐阅读
- php - 为什么 Nginx 在 PHP 文件中给出 403 错误?
- sql - UNNEST 的订购保证
- tailwind-css - 如何使用 purgeCSS (Tailwindcss) 将属性选择器列入白名单或安全列表?
- python - 为什么在 Python 中扩展嵌套列表也会扩展后续嵌套列表?
- java - 我怎样才能知道类中每个粒子的确切位置?
- java - XA 全球交易 - EtityManager null
- reactjs - 如何在 React JS 的 Javascript 函数中使用参数变量的文字值?
- python - 使用 python 获取 Discord html?
- python - 如何在数据帧上执行 pd.get_dummies() ,同时保持 NA 值到位而不是创建 NA 列?
- informatica - Informatica 间接文件加载 - 生成带有路径的空行