ios - 当 react native 应用程序 View 加载时,如何在 native ios 上调用 ViewController 类?

标签 ios swift react-native

我想创建一个 react-native 应用程序。在这个应用程序中,我想使用我的 swift 代码。当 react-native 应用程序 View 加载 ios 设备时,我想调用我的 swift 代码,就像原生 ios 应用程序一样。

谢谢

最佳答案

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

  1. 向您的项目添加一个 swift 文件:文件 → 新建 → 文件…(或 CMD+N)选择 Swift 类型并提供一个名称

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

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

  4. 为了向您展示一些示例,我将为 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

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

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

NativeModules.Counter.increment()

所有这些例子都来自这篇文章:Swift in React Native - The Ultimate Guide Part 1: Modules我强烈推荐阅读,因为它在主题中包含更多详细信息。

关于ios - 当 react native 应用程序 View 加载时,如何在 native ios 上调用 ViewController 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58604022/

相关文章:

ios - 自定义可选类在分配给 nil 时不释放

swift - 无法使用 alamofire 获取新内容(无法刷新缓存内容)

c++ - 我可以将 C++ 代码(或用 C++ 编写的库)与混合移动应用程序代码混合使用吗?

iphone - 使用非零原点初始化 UIImageView 的更好方法

ios - 如何将核心数据与多个 View Controller 和自定义类一起使用?

swift - 如何使用 google 登录 sdk 在 UIButton 而不是 UIView 中实现 google 登录?

android - React-Native Android ScrollView 无法从 onScroll 获取事件

ios - 将单元格添加到 UITableView,但它们不会在视觉上显示,但我可以单击并且它们可以工作

ios - NSRangePointer 错误 swift

javascript - React Native 接收新的 props,componentWillReceiveProps