react-native 应用程序视图加载时,如何在本机 ıos 上调用 ViewController 类?

Posted

技术标签:

【中文标题】react-native 应用程序视图加载时,如何在本机 ıos 上调用 ViewController 类?【英文标题】:How can call a ViewController class on native ıos when react-native app view load? 【发布时间】:2019-10-29 08:53:08 【问题描述】:

我想创建一个 react-native 应用程序。在这个应用程序中,我想使用我的快速代码。当 react-native 应用程序视图加载 ios 设备时,我想调用我的 swift 代码,如原生 ıos 应用程序。

谢谢

【问题讨论】:

【参考方案1】:

我不是 react-native 专家,但我认为您应该在 Swift 中创建一个类,在 Objective-C 中导出它(使其可以从 javascript 访问),然后在您的 JavaScript 代码中使用。我假设你已经在 Xcode 中有一个项目。您需要执行几个步骤:

    将 swift 文件添加到您的项目中:文件 → 新建 → 文件...(或 CMD+N)选择 Swift 类型并提供名称

    系统会询问您是否要创建 Objective-C 桥接头并选择“创建桥接头”

    将创建文件your-project-name-Bridging-Header.h(其中your-project-name是您项目的名称),这是objective-c和swift之间的粘合剂,我们将使用它来将我们的代码导出到JavaScript

    为了向您展示一些示例,我将使用此代码来生成 swift 文件:

import Foundation

@objc(Counter) //1
class Counter: NSObject  //2
  private var count = 0
  @objc //3
  func increment() 
    count += 1
    print("count is \(count)")
  

确保你注意到一些重要的部分(不同于典型的 swift 代码):标记 1 和 3 - 你必须为类和函数添加 @objc 声明,(2)类应该继承自 NSObject

    your-project-name-Bridging-Header.h 中,您需要使用此代码才能在 JavaScript 中使用您的 swift 代码:
#import "React/RCTBridgeModule.h"

@interface RCT_EXTERN_MODULE(Counter, NSObject)
RCT_EXTERN_METHOD(increment)
@end
    将此代码添加到您的App.js
// App.js
import  NativeModules  from 'react-native'

NativeModules.Counter.increment()

所有这些例子都取自这篇文章:Swift in React Native - The Ultimate Guide Part 1: Modules,我强烈推荐阅读这篇文章,因为它包含了该主题的更多细节。

【讨论】:

谢谢,我确实看过这篇文章。但是多亏了你,我才有机会详细检查并解决了我的问题。

以上是关于react-native 应用程序视图加载时,如何在本机 ıos 上调用 ViewController 类?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jest+enzyme 在 react-native 中选择一个元素(文本、视图)(主要是当文本/视图嵌套在组件的深处时)?

React-Native 中的关闭重新加载页面

如何将 UINavigationController 与 React-Native 组件集成

如何在 react-native 的键盘顶部显示自定义视图

如何在 react-native 中动态加载模块?

如何在 React-Native 中禁用远程 JS 调试