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 中选择一个元素(文本、视图)(主要是当文本/视图嵌套在组件的深处时)?