首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在将Swift连接到React-Native时,Got“不是公认的Objective-C方法”

在将Swift连接到React Native时,遇到“不是公认的Objective-C方法”的错误,通常是因为Swift中的某些方法没有正确地暴露给Objective-C环境。Swift和Objective-C在互操作性方面有一些特定的规则需要遵守。以下是解决这个问题的步骤和相关概念:

基础概念

  1. Swift与Objective-C互操作性:Swift可以调用Objective-C代码,反之亦然。为了实现这一点,Swift代码需要暴露给Objective-C,通常是通过桥接头文件(Bridging Header)。
  2. 桥接头文件:这是一个Objective-C头文件,用于告诉Xcode哪些Swift文件应该被编译成Objective-C兼容的代码。
  3. @objc标记:在Swift中,只有被@objc标记的方法、属性、协议等才能被Objective-C识别和调用。

解决步骤

  1. 确保桥接头文件存在并正确配置
    • 在Xcode项目中,确保有一个桥接头文件(通常命名为YourProject-Bridging-Header.h)。
    • 在项目的Build Settings中,找到“Objective-C Bridging Header”设置,并将其路径设置为你的桥接头文件的完整路径。
  • 在Swift文件中使用@objc标记
    • 确保所有需要暴露给Objective-C的Swift方法、属性等都使用了@objc标记。
    • 确保所有需要暴露给Objective-C的Swift方法、属性等都使用了@objc标记。
  • 在React Native中调用Swift代码
    • 使用NativeModules来调用Swift代码。首先,确保你的Swift类和方法已经正确暴露给Objective-C。
    • 使用NativeModules来调用Swift代码。首先,确保你的Swift类和方法已经正确暴露给Objective-C。

示例代码

假设你有一个Swift类SwiftClass,并且你想在React Native中调用它的方法:

Swift代码

代码语言:txt
复制
// SwiftClass.swift
import Foundation

@objc(SwiftClass) class SwiftClass: NSObject {
    @objc func swiftMethod() -> String {
        return "Hello from Swift!"
    }
}

桥接头文件

代码语言:txt
复制
// YourProject-Bridging-Header.h
#import "SwiftClass.h"

React Native代码

代码语言:txt
复制
// App.js
import React, { useEffect } from 'react';
import { NativeModules } from 'react-native';

const { SwiftClass } = NativeModules;

const App = () => {
  useEffect(() => {
    SwiftClass.swiftMethod()
      .then((result) => console.log(result))
      .catch((error) => console.error(error));
  }, []);

  return (
    <View>
      <Text>Check the console for output</Text>
    </View>
  );
};

export default App;

参考链接

通过以上步骤,你应该能够解决“不是公认的Objective-C方法”的错误,并成功将Swift连接到React Native。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

从 iPhone OS 1.0 到 iOS 14 编程语言演变

一些读者问我是否可以提供一个百分比而不是一个绝对数字。 在这篇新文章中,我通过测量 iOS 中二进制文件总数来回答这个问题。...我更进一步,并计算使用其他编程语言二进制文件数量:Objective-C、C++ 和 C。...检测 Swift 检测 Swift 使用可以使用类似的方法来完成,如2016 年一篇旧帖子所述。...如果二进制文件既不链接到 Objective-C 运行时库也不链接到 C++ 标准库,而是使用libc位于标准 C 库/usr/lib/libSystem.B.dylib,那么我们可以假设这个二进制文件完全用...从这张图中可以更容易地看出每种编程语言演变: 使用各种编程语言二进制文件数量 WidgetKit 小部件和 Objective-C 查看数据以确保它们有意义,我惊讶地发现所有使用 WidgetKit

2K30

iOS工程师必看 20 道 面试题

Swift 中,类是引用类型,结构体是值类型。值类型传递和赋值进行复制,而引用类型则只会使用引用对象一个"指向"。所以他们两者之间区别就是两个类型区别。...SwiftObjective-C混编项目中,如何在Swift文件中调用Objective-C文件中已经定义方法?如何在Objective-C文件中调用Swift文件中定义方法?...Swift文件中若要规定固定方法或属性暴露给Objective-C使用,可以方法或属性前加上@objc来声明。...具体过程是Objective-C中对象调用方法,如self.tableview reload,发生了两件事。...runtime执行是编译后代码,这时它可以动态加载对象、添加方法、修改属性、传递信息等等,runtime运行机制就是Objective-C动态特性。 Swift目前被公认为是一门静态语言。

3.8K40
  • ReactJS到React-Native,架构原理概述

    对于 React Native ,React Native 调用Objective-C API 去渲染iOS 组件,调用Java API 去渲染Android 组件,而不是渲染到浏览器DOM 上。...这些组件因平台而不同,因此使用React Native ,如何组织你组件变得尤为重要。...Flexbox构建响应式App最佳选择——CSS中表现不太一致,React-Native不是为web元素而生,不能像web 应用在html里面使用CSS这里还是体现了Weex优势维度React NativeWeex...创建 BatchedBridge 关键是 start 方法,它可以分为五个步骤:读取 JavaScript 源码JavaScript 代码是 Objective-C 提供环境下运行,所以第一步就是把...JS调用OC代码调用 Objective-C 代码,JavaScript 会解析出方法 ModuleId、MethodId 和 Arguments 并放入到 MessageQueue 中,等待 Objective-C

    5.4K10

    ReactJS到React-Native,架构原理概述

    对于 React Native ,React Native 调用Objective-C API 去渲染iOS 组件,调用Java API 去渲染Android 组件,而不是渲染到浏览器DOM 上。...这些组件因平台而不同,因此使用React Native ,如何组织你组件变得尤为重要。...Flexbox构建响应式App最佳选择——CSS中表现不太一致,React-Native不是为web元素而生,不能像web 应用在html里面使用CSS这里还是体现了Weex优势维度React NativeWeex...创建 BatchedBridge 关键是 start 方法,它可以分为五个步骤:读取 JavaScript 源码JavaScript 代码是 Objective-C 提供环境下运行,所以第一步就是把...JS调用OC代码调用 Objective-C 代码,JavaScript 会解析出方法 ModuleId、MethodId 和 Arguments 并放入到 MessageQueue 中,等待 Objective-C

    6K10

    这门「没落」语言薪451元,自由职业平台Upwork公布兼职语言薪资排行

    机器之心报道 编辑:张倩 海外知名自由职业平台 Upwork 一份调查显示,众多编程语言中,Objective-C 成为该网站薪最高语言,掌握该语言程序员每小时可以赚 66 美元(约合 451...对于程序员来说,如果你工作不是 996 或 007,那么兼职也是一个很好创收途径,比如在 Upwork 这种兼职网站上。...最新一份调查中,Upwork 公布了 15 种兼职收入最高编程语言,Objective-C薪 66 美元位居榜首。...Objective-C 流行也要归功于 iPhone 成功。但近年来,苹果一直想让开发者放弃 Objective-C,转向 Swift。...除了 Objective-C 之外,还有一些排在前十语言现在没那么流行,比如薪 62 美元 Windows PowerShell 和薪 60 美元 Excel VBA。

    97020

    分享一个夹心饼架构:小程序+Rust

    理由们如下: 当你开发一款应用,需要跨 iOS、Android 甚至 MacOS、Windows、Linux 时候,你可能在各平台还是用该平台相应语言和开发框架,例如 Objective-C/Swift...它甚至成为 Linux 官方接受除 C 语言之外唯一可用于内核开发语言。 Rust 代码移动端运行? 用 Rust 编写、编译代码跑设备端?没有问题。...另一个好消息是, iOS 平台上,Swift/Objective-C 代码调用 C 函数,耗损几乎可忽略不计。...确实,Objective-C 本身可以被视为 C 超集, Objective-C 中整合 C 代码本身就是“纯天然”。...拦路虎是人机交互(UIUE)部分,当前业界也有各种方案选择: JavaScript/React-Native:让开发者只需要懂 JavaScript 和 React,即可开发出一个目标平台应用,原理是让

    68440

    Stack Overflow 上这些问题,加快了程序员 秃头 速度...

    但是,尽管 JavaScript 可能是整体排名最高编程语言,但当我们按时间划分数据,我们发现需要一个新王冠。 ?...(也许 Python 正在迅速成为最受欢迎编程语言,或者与其他语言相比,Python 新编码者所占比例更大!) 但是这些开发人员到底问什么呢?讨论最多框架、软件包、功能和方法是什么?...直到 Swift 推出为止。 Swift ? 首次出现于 2014 年 Swift 苹果开发领域已取代 Objective-C。...尽管标签为 #swift Stack Overflow 问题中,“objective-c” 被提及频率 (中右) 可能代表了成千上万 iOS 开发者希望 Stack Overflow 来更新他们知识...这就解释了为什么我们看到 SQL 中 “ database ” 是一个普遍被讨论概念,但在 Objective-C 等语言中却不是这样。

    72540

    Swift单例模式

    参考:http://swifter.tips/singleton/ OC写法 Objective-C 中单例公认写法类似下面这样: @implementation MyManager + (id...swift写法 class MyManager { static let sharedInstance = MyManager() private init() {} } 这种写法不仅简洁...初始化类变量时候,Apple 将会把这个初始化包装在一次 swift_once_block_invoke 中,以保证它唯一性。...另外,我们在这个类型中加入了一个私有的初始化方法,来覆盖默认公开初始化方法,这让项目中其他地方不能够通过 init 来生成自己 MyManager 实例,也保证了类型单例唯一性。...如果你需要是类似 defaultManager 形式单例 (也就是说这个类使用者可以创建自己实例) 的话,可以去掉这个私有的 init 方法

    1.2K50

    Rust 开发小程序动机及设想

    理由们如下: 当你开发一款应用,需要跨 iOS、Android 甚至 MacOS、Windows、Linux 时候,你可能在各平台还是用该平台相应语言和开发框架,例如 Objective-C/Swift...它甚至成为 Linux 官方接受除 C 语言之外唯一可用于内核开发语言。 Rust 代码移动端运行? 用 Rust 编写、编译代码跑设备端?没有问题。...另一个好消息是, iOS 平台上,Swift/Objective-C 代码调用 C 函数,耗损几乎可忽略不计。...确实,Objective-C 本身可以被视为 C 超集, Objective-C 中整合 C 代码本身就是“纯天然”。...拦路虎是人机交互(UIUE)部分,当前业界也有各种方案选择: JavaScript/React-Native:让开发者只需要懂 JavaScript 和 React,即可开发出一个目标平台应用,原理是让

    1.2K10

    我们分析了11种语言11000个问题

    但是,尽管 JavaScript 可能是整体排名最高编程语言,但当我们按时间划分数据,我们发现需要一个新王冠。 ?...(也许Python正在迅速成为最受欢迎编程语言,或者与其他语言相比,Python 新编码者所占比例更大!) 但是这些开发人员到底问什么呢?讨论最多框架、软件包、功能和方法是什么?...09 Swift ? 首次出现于 2014 年 Swift 苹果开发领域已取代 Objective-C。...尽管标签为#swift Stack Overflow 问题中,“objective-c”被提及频率(中右)可能代表了成千上万 iOS 开发者希望 Stack Overflow 来更新他们知识...这就解释了为什么我们看到 SQL 中“ database ”是一个普遍被讨论概念,但在 Objective-C 等语言中却不是这样。

    48020

    慎选!这几门编程语言,即将被淘汰,不要学错了!

    同时期下,后三者已经发展到可以满足当时需求,而Ruby很多方面一直原地踏步,没有什么进步。 例如,让Ruby on Rails名噪一MVC架构。其实现在看起来多多少少都有点过时。...Visual Basic Visual Basic是公认程序员最不喜欢编程语言之一,没人反对吧? 它是微软1991年发布,作为构建Windows主要工具,目标是实现了,但最近问题也不少。...研究人员和学者大多Haskell用于构建程序,以对其工作进行复杂排列和外推计算,但是学起来很难!...尽管Objective-C已经macOS、iOS和OS X开发中使用了二十多年(1996 年至今)时间。 但如今已经很少有程序员使用该语言,因为Swift横空出世了。...如果创造者和社区投入足够精力来更新和维护它们,添加新功能以及有用特性,这些编程可能会卷土重来,恢复生命力。 但事实这种性价比不是很高,肯定会有更新,更好选择。

    13110

    我们分析了Stack Overflow11000个问题

    但是,尽管 JavaScript 可能是整体排名最高编程语言,但当我们按时间划分数据,我们发现需要一个新王冠。 ?...(也许Python正在迅速成为最受欢迎编程语言,或者与其他语言相比,Python 新编码者所占比例更大!) 但是这些开发人员到底问什么呢?讨论最多框架、软件包、功能和方法是什么?...Swift ? 首次出现于 2014 年 Swift 苹果开发领域已取代 Objective-C。...尽管标签为#swift Stack Overflow 问题中,“objective-c”被提及频率(中右)可能代表了成千上万 iOS 开发者希望 Stack Overflow 来更新他们知识...这就解释了为什么我们看到 SQL 中“ database ”是一个普遍被讨论概念,但在 Objective-C 等语言中却不是这样。

    51920

    我们分析了Stack Overflow11000个问题

    但是,尽管 JavaScript 可能是整体排名最高编程语言,但当我们按时间划分数据,我们发现需要一个新王冠。 ?...(也许Python正在迅速成为最受欢迎编程语言,或者与其他语言相比,Python 新编码者所占比例更大!) 但是这些开发人员到底问什么呢?讨论最多框架、软件包、功能和方法是什么?...Swift ? 首次出现于 2014 年 Swift 苹果开发领域已取代 Objective-C。...尽管标签为#swift Stack Overflow 问题中,“objective-c”被提及频率(中右)可能代表了成千上万 iOS 开发者希望 Stack Overflow 来更新他们知识...这就解释了为什么我们看到 SQL 中“ database ”是一个普遍被讨论概念,但在 Objective-C 等语言中却不是这样。

    49610

    React Native框架与小程序混编方案

    React Native 已经成为一种流行移动开发技术,它提供了一个使用 JavaScript 构建原生跨平台移动应用强大框架,需要,我们也可以使用 Objective-CSwift或 Java...这反过来有助于发布新版本使 iOS 和 Android 应用保持同步。...对于复杂应用,可能要编写自定义组件或深入了解 iOS 和 Android(例如,出于性能原因或 React Native 添加到现有原生应用时所需但不支持UI组件)。...工程react-native init mopdemo稍等一会… 初始化项目完成之后,你可以选择两种不同方式运行 App iOS/Android 平台:注意!...apiServer 为这里是小程序生态后端服务地址也就是前文所输入IP:端口。小程序id 为管理后台上架小程序唯一ID(小程序小架自动生成)。

    1.8K20

    成为一名优秀 Swift 开发人员 10 个小技巧

    为项目选择正确库是一项有意思工作,大多数情况下,使用基本库就正确做法。这可以让你专注于特定应用程序特定功能,而不是常见功能上浪费时间。...使用扩展并合理使用它们来创建公共库 我很喜欢 Swift 扩展。使用 Objective-C ,我总是不情愿地使用继承。当然这并不总是错误,正确使用子类也不会出错。...但是 Swift 扩展可以轻松地简单方法集成到通用类上,而无需做任何复杂事情。...只需要将所有 UIButton 连接到相同 @IBAction,然后使用发送方找出触发了该事件中哪一个,并为该特定行为编写正确实现即可。...本文中,我重点更多地放在Swift功能上,以提高代码效率并传递Swift机制优点。我提供了一些简单示例,说明每个iOS应用程序和开发人员应关注重点。 - EOF -

    2.3K40

    SwiftObjective-C混编在有赞移动实践

    )中导入需要暴露给 Swift 模块 Objective-C 类,即可在 Swift 中访问相应 Objective-C 类和方法 Objective-C 访问 Swift Objective-C...访问 Swift Objective-C 类中导入 ProductName-Swift.h,即可访问 Swift 中暴露给 Objective-C 类和方法 由于我们目前业务比如商品模块、消息模块...文件,点击是,系统会帮你创建一个 Bridging-Header,你可以需要引用 Objective-C 模块头文件放在里面,然后你可以 Swift 模块用 Objective-C 类。...Swift Swift 类中将需要暴露给 Objective-C 模块引用类,用 public 申明 Swift 类中需要暴露给 Objective-C 方法要用关键字 @objc Objective-C...类中引用 ProductName-Swift.h 头文件即可引用暴露给 Objective-C Swift 类和方法 5.7 pod spec lint 验证和发布 pod spec lint

    2.2K20

    译文: 低调奢华有内涵「Runtime」

    Swift3.0不是要干死Objective-C了吗? 此言差矣。Swift虽是天天上头条,但是并不意味着已经完全把曾经和我们朝夕相处老相好干翻了。为什么非得要互怼,就不能一起愉快滴玩耍吗?...静态语言,使用是静态方法调度,还有前期类型绑定,意味着编译器「编译」就已经定下来了。也就是说,当一个程序正在运行时,你可以100%确保开发者意图是会被执行。...幸运是,你有associated objects,它允许你「运行时」任意值和某个对象关联起来。假设你要创建一个UIImageViewcategory,用于下载图片。...感谢Objective-CRuntime,我们可以「运行时」为这个对象添加缺失方法(方法实现为空),这样就可以防止这个崩溃了。...如果可以,避免使用Objective-CRuntime,只有在手头上问题不能用其他方法解决,才使用它(小心使用)。 当你使用Runtime,要清醒知道自己在做什么。

    97140

    iOS开发者“祖师爷”去世了:他发明了Objective-C语言

    Brad Cox本人也衷心于教育,1991年他出版了《面向对象程序设计:一种进化方法》一书,还致力于通过互联网开发早期在线课程。...1981年,Cox很快写出了面向对象预编译器(OOPC),它可以类似Smalltalk语法翻译成C语言,这就是Objective-C前身。...虽然乔布斯创立NeXT硬件方面未能站住市场,但是软件方面却大获成功。 1994年,Cox创立Stepstone倒闭,Objective-C所有权利都被NeXT收购。...虽然苹果于2014年推出了Swift语言意图取代之,但Objective-C现在仍是iOS主要开发语言之一。...轶事 尽管Cox发明了编程语言Objective-C,但他2019年接受《编程大师》专访表示,他本人对编程语言不感兴趣,他认为语言只是构建和组合软件各部分工具。

    30030

    27.Swift学习之与OC混编

    目前iOS开发语言从Objective-CSwift过渡时期,开发中难免会碰到两种语言同时存在情况,如果在同一个项目中,两种语言并存,那么该项目就是一个混合项目。...Apple给我们做好了“桥接”工作,但是Objective-C项目中调用SwiftSwift项目中调用Objective-C,处理方式是不一样,下面来进行一个简单介绍。...一、Objective-C项目中调用Swift 新建一个Objective-CiOS项目 创建一个Swift类,继承自NSObject,这时候会有如下提示,此时选择Create Bridging...Swift文件如下: class Person: NSObject { } Objective-C类中导入头文件,注意此时导入头文件是一个命名为项目名-Swift.h头文件,而不是Bridging...Header文件,该头文件是自动生成并且对开发者透明 Swift代码中将需要暴露给OC调用属性和方法前加上 @objc修饰符,关于这个内容可查看之前博文 class Person: NSObject

    1.2K10

    Swift 是猴还是猿?

    安全角度取消了Objective-C很多兼容语法,只取其一,因为不再是C超级,所以那些C语言上存在历史诟病,Swift上不复存在。...LLVM,Chris Lattner主要精力转向Swift研发上,LLVM项目自身存活与否已经不会有什么影响。...2.x网上有很多同行验证Swift自增自减运算相对OC有严重性能问题,2.x到3.x去掉了不知是不是当前尚未解决此问题或是有其它替代方案。...3.x到4.x一个典型改动点是关于set selector,Swift 3.x,selector函数定义前不需要添加@objc修饰。Swift 4.0中则必须要加@objc修饰。...Objective-C是一门动态语言,对开发者来说即运行时编程,可以runtime进行类和方法增删修改,甚至是对无源码class和类库进行method swizzling改变原有库接口功能等,给开发者提供了足够大权限和便利

    3.9K30
    领券