【问题标题】:React Native SwiftUI 'unrecognized selector sent to instance'React Native SwiftUI'无法识别的选择器发送到实例'
【发布时间】:2020-01-31 19:22:09
【问题描述】:

我正在尝试在我的 React Native 应用程序中使用 SwiftUI 组件,这似乎有点复杂,因为我还没有找到任何在线文档或教程。以下是我正在使用的文件:

CategoryCardView.swift

import UIKit
import SwiftUI

struct CategoryCard: View {
  var name: String
  var body: some View {
      Text(name)
  }
}

@objc(RCTCategoryCardViewManager)
class RCTCategoryCardViewManager: RCTViewManager {
  override static func requiresMainQueueSetup() -> Bool {
    return true
  }

  @objc var name: String = "Default text"
  override func view() -> UIView! {
    let swiftUIView = CategoryCard(name: name)
    let viewController = UIHostingController(rootView: swiftUIView)
    return viewController.view
  }
}

CategoryCardView.m

#import <React/RCTViewManager.h>

@interface RCT_EXTERN_MODULE(RCTCategoryCardViewManager, RCTViewManager)
RCT_EXPORT_VIEW_PROPERTY(name, NSString)
@end

NativeCategoryCard.tsx(在 React Native 中):

import {requireNativeComponent} from "react-native";
import React from "react";

const NativeCategoryCard = requireNativeComponent('RCTCategoryCardView');

export interface CategoryCardProps{
    name: string;
}

function CategoryCard(props: CategoryCardProps) {
    return <NativeCategoryCard
        style={[{
            height: 100,
            width: 100
        }]}
        {...props}
    />
}

export default CategoryCard;

然后在我的 React Native 代码中的某个地方:

<CategoryCard text='hello' />

我的应用在尝试渲染 &lt;CategoryCard&gt; 时抛出以下错误:

Exception thrown while executing UI block: -[_TtGC7SwiftUI14_UIHostingViewV7PalChat12CategoryCard_ setName:]: unrecognized selector sent to instance 0x7fc8718c7830

我对 Swift 和 SwiftUI 不是很了解,尤其是在与 React Native 集成方面,所以如果我犯了一个明显的错误,我深表歉意。

【问题讨论】:

    标签: ios swift react-native swiftui


    【解决方案1】:

    您的方法不起作用 - 您必须使用 ObservableObject 来获取道具更改更新。

    这个article 详细描述了如何混合 react-native 和 SwiftUI。

    你也可以使用我的make-react-native-package 模块来搭建支持 SwiftUI 的 RN 组件:

    $ npx make-react-native-package -p my-component -g username -t ios:swift-ui
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 2012-07-24
      相关资源
      最近更新 更多