最新要闻
- 汉唐元三车齐发!比亚迪乘用车在西班牙正式开售
- 【世界独家】不虚标!比亚迪汉EV冠军版实测光电续航达成率93.1%
- 世界今热点:中国最畅销手机出炉:“十三香”传奇上演 安卓高端难成
- 内存狂魔第一次冲上8200MHz!芝奇带来96GB DDR5
- 佛山企业标准“领跑者”数量连续三年全国第一
- 当前视点!腮腺炎初期有什么症状?_腮腺炎初期有什么症状
- 今日要闻!验证码被攻破!谷歌AI已能精准识别 GPT-4则装瞎求人帮忙
- 美女博主在家拍擦边视频?穿瑜伽服涨粉百万!真相是...
- 全球今头条!3DMark加入AMD FSR专项测试:终于追上NVIDIA、Intel
- 全球报道:广汽埃安AION Y Plus 2023款上市:14万级唯一纯电610KM续航
- 天天信息:V观财报|科达制造股东广东联塑短线交易致歉
- 世界信息:5.98万起售还嫌贵?五菱缤果上市即热销:当天交付522台
- 每日热议!想买车的抓紧 广州新能源汽车也有补贴了:最高1万元
- 世界微头条丨《原神》开发商新作:米哈游《崩坏:星穹铁道》预约超2000万
- 环球热推荐:米香四溢:袁隆平品牌隆平农场东北晶米10斤39.9元发车
- 华硕ROG游戏手机7真机曝光:无挖孔全面屏、后置三摄
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Swift与OC混编
(资料图片)
Swift调OC在Swift项目中调用OC类中的方法需要有个{targetName}-Bridging-Header.h文件,在这个文件中导入OC要暴露给Swift的类。{targetName}-Bridging-Header.h文件的创建有2种方式1.自己手动创建,然后在配置文件的Object-C Bridging Header中添加这个{targetName}-Bridging-Header.h文件的路径2.在Swift项目工程中创建一个OC类,此时Xcode会自动帮助创建。3.在Swift中使用OC类import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. let p = Person(); p.name = "jack"; p.age = 11; p.say(); }}如果自己在OC中定义的C语言函数名字和Swift运行中的函数名一样,冲突时,可以使用@_silgen_name将C函数的名字进行重新成Swift的另一个函数名,供Swift中使用。
@_silgen_name("sum") func swift_sum(a: Int, b: Int) -> IntOC调SwiftSwift项目在创建时就默认生成了一个{targetName}-Swift.h文件,用于暴露Swift类给OC使用。注意这里的targetName不允许使用-链接单词,如果出现这种情况会把-自动改成_进行单词连接。如下,当前项目名是Swift-OC,而targetName被自动改成了Swift_OC。Swift暴露给OC类使用时需要做一定的修改。1.要暴露的类需要继承自NSObject2.要暴露成员变量和方法给OC时,需要加@objc声明。3.要暴露全部信息时,包含成员变量和方法以及扩展中的信息,则要在类前面加@objcMembers进行声明。
@objcMembers class Car: NSObject { var speed: Float; var name: String; init(speed: Float, name: String) { self.speed = speed; self.name = name; } func run() -> Void { print("出发,时速:\(self.speed)") }}extension Car { func circleRun() { print("跑圈,时速:\(self.speed)") }}Swift中@objc的使用可以使用@objc重命名swift暴露给oc的方法selector是oc的runtime里使用的一套东西,只有swift中的类暴露给OC是才能正常使用。
@objcMembers class Car: NSObject { var speed: Float; @objc(bigName) //重写暴露给OC的方法 var name: String; init(speed: Float, name: String) { self.speed = speed; self.name = name; } func run() -> Void { print("出发,时速:\(self.speed)") } func runPerform() -> Void { perform(#selector(run)) }}extension Car { @objc(bigRun) func circleRun() { print("跑圈,时速:\(self.speed)") }}Swift中被@objc 修改的协议可以被OC实现
@objc protocol RunProtocol {}Swift的类中中被@objc dynamic 修改的方法 走runtime的那套消息发送机制
class Computer: NSObject { @objc dynamic func work(num: Int) { print("工作时长:\(num)") }}Swift的类中中被@objc dynamic 修改的属性可以进行KVC/KVO
class Person: NSObject { @objc dynamic var age: Int = 10 override init() { super.init() self.addObserver(self, forKeyPath: "age", options: .new, context: nil) } override class func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { print("observer回调:\(change!)") } deinit { self.removeObserver(self, forKeyPath: "age") }}Swift与OC互相调用理解1.Swift要暴露给OC调用,为什么要继承自NSObject?OC的方法调用走的runtime的objc_sendMsg(), 这就需要isa指针, 而NSObject中有isa指针,所以要继承自NSObject2.Swift调用OC桥接类的方法是怎么调用的,OC调用Swift暴露的方法又是如何调用的?Swift调用自己定义的纯Swift方法底部走的是C++虚函数表那套。Swift调用OC桥接类的方法底层走的还是OC的objc_msgSender机制,因为OC文件被编译后是转换的消息发送代码。OC调用Swift暴露的方法时,因为是继承自NSObject, 所以底部走的还是objc_sendMsg机制3.对于Swift类继承了NSObject,再在swift调用时,是怎么调用的?底层走的还是Swift的需函数表那套,这套性能更高。如何让Swift的方法走Runtime的消息转发机制呢?通过在方法前面添加dynamic修饰
@objcMembers class Car: NSObject { var speed: Float; @objc(bigName) //重写暴露给OC的方法 var name: String; init(speed: Float, name: String) { self.speed = speed; self.name = name; } dynamic func fillOil() -> Void { print("加油") }}
关键词:
Swift与OC混编
环球信息:知乎使用指南
汉唐元三车齐发!比亚迪乘用车在西班牙正式开售
【世界独家】不虚标!比亚迪汉EV冠军版实测光电续航达成率93.1%
世界今热点:中国最畅销手机出炉:“十三香”传奇上演 安卓高端难成
内存狂魔第一次冲上8200MHz!芝奇带来96GB DDR5
佛山企业标准“领跑者”数量连续三年全国第一
当前视点!腮腺炎初期有什么症状?_腮腺炎初期有什么症状
全球时讯:深度学习——用简单的线性模型构建识别鸟与飞机模型
Redhat/CentOS Linux 系统进入单用户模式
天天即时看!万恶的环境 二 java
今日要闻!验证码被攻破!谷歌AI已能精准识别 GPT-4则装瞎求人帮忙
美女博主在家拍擦边视频?穿瑜伽服涨粉百万!真相是...
全球今头条!3DMark加入AMD FSR专项测试:终于追上NVIDIA、Intel
全球报道:广汽埃安AION Y Plus 2023款上市:14万级唯一纯电610KM续航
天天信息:V观财报|科达制造股东广东联塑短线交易致歉
世界消息!Teamcenter_SOA开发:使用查询构建器查询数据
即时:flatMap
热讯:React Native 备忘清单_开发速查表分享
世界信息:5.98万起售还嫌贵?五菱缤果上市即热销:当天交付522台
每日热议!想买车的抓紧 广州新能源汽车也有补贴了:最高1万元
世界微头条丨《原神》开发商新作:米哈游《崩坏:星穹铁道》预约超2000万
环球热推荐:米香四溢:袁隆平品牌隆平农场东北晶米10斤39.9元发车
华硕ROG游戏手机7真机曝光:无挖孔全面屏、后置三摄
天天讯息:华天科技2022年营收119亿元 拟实施先进封测研发及产业化项目
当前焦点!Leetcode Practice --- 栈和队列
我的第一个项目(七):(解决问题)Vue中canvas无法绘制图片
观点:确认引进内地!《小美人鱼》新泄露镜头:爱丽儿深情抚摸王子的脸
全球首个商用海底数据中心在海南下水:算力高、散热不费电
今日关注:不挑路面、转得很稳 仰望U8如何实现原地掉头?官方详解
大学生应聘饭店洗碗工被HR婉拒 HR:第一份工作很重要 这会害了他
不等发布会!vivo X Fold2真机抢先看:素皮+玻璃设计惊艳
现场丨圆桌对话:抓住确定性——楼宇经济的大周期和小趋势
讯息:awk 处理 Git 提交信息生成 Release Note
最长上升子序列 II
视焦点讯!day3 函数的定义和调用,练习编写简单的程序(记录1)
天天热文:内存/SSD白菜价甩卖 美光芯片大减产:工厂停机率创纪录
任泽平:在中国做生意没任何理由抱怨 燃油车正迎来诺基亚时刻
世界新资讯:宏碁推出W系列4K电视:QLED面板、30W扬声器
油价“二连降” 今年来最大降幅!加满一箱油少花13元
【全球热闻】网络时钟同步设备(NTP时间同步服务器)技术设计应用方案
全球实时:记录--你可能忽略的10种JavaScript快乐写法
聚焦:无所畏惧的求和题解
今亮点!商品日报(3月31日):焦炭低位反弹菜油补涨 纸浆、玻璃主力合约跌超2%
保姆级教程!12306官方详解“免费坐高铁”
环球速递!RTX 40系显卡才能“撑得住”!《赛博朋克2077》实现路径光追
夏季必备 圈叉潮品纯棉印花T恤/短裤24.9元起
【新视野】编程神童立志写最棒的程序改变世界 严重偏科只能选职高 妈妈无奈
世界视讯!成龙自豪发声:不是我要去好莱坞 而是好莱坞要我
“19鑫苑01”到期日期将延期一年
Excel批量检查5列数据是否一致(存在不规则空值)
【密码管理器】上海道宁为您提供存储和使用强密码的简单方法工具软件——1Password
【环球报资讯】MQTT协议介绍
世界热资讯!开心档之Go 语言环境安装
DIM中的一些知识点(慢更)
新消息丨每日机构分析:3月31日
全球实时:国家发展改革委:国内汽、柴油价格每吨分别降低335元和320元
焦点简讯:吃日料、听京剧 库克时隔3年再访中国:6年前还去过ofo小黄车总部
全球观焦点:酷派新品发布会定档4月3日:三款新机待发
世界聚焦:2023增长最快的手机品牌!一加Ace 2首销日销量在第三方平台遥遥领先
天天观察:B站弹幕射击《爆裂魔女》5月30日停运 共运营592天
任天堂Switch 2不会远了!开发者已收到新主机开发工具
世界信息:周日阳光可期抓紧洗晒 下周四冷空气再袭降水将达到中雨
每日快讯!卸载SQL Server 2012图文教程
环球报道:你还在手写 join 联表查询?MyBatis-Plus 这样写太香了!
天天新动态:Python 数字类型之 int float
每日观点:收评:两市红盘震荡创指涨0.69% 人工智能板块涨幅居前
世界百事通!比亚迪F品牌再曝谍照 主攻40-60万市场/下半年预售
天天资讯:38岁985文科硕士被迫送外卖!本人再发声:已脱下孔乙己长衫 应聘道士被拒
云南一县城禁止“脏车入城”:有明显污迹、车轮粘泥不许在城区行驶
百元就能畅享8K 流畅清爽无广告!当贝盒子H3视频评测
当前快讯:刘浩存在新片《龙马精神》首映礼上哭了:感谢成龙带自己拍戏
环球今头条!GPT-4被指威胁公共安全!OpenAI遭第三方组织投诉
基于Go/Grpc/kubernetes/Istio开发微服务的最佳实践尝试 - 2/3
【焦点热闻】如何实现根据环境切换不同配置?
数据丢失不用怕,火山引擎 DataLeap 提供排查解决方案
英特尔以强大产品力,迎接生成式AI的广阔机遇
【全球快播报】北京启动存量住房交易“带押过户”模式
热消息:直播间卖卫星 最低200万!罗永浩:真的 把卫星价格打下来
Redmi Note 12 Turbo晒战绩:16GB+1TB开售5分钟超过全行业历史销量之和
每日热闻!这就离谱!A7S3传感器用来拍Vlog 索尼ZV-E1开启预售
vivo X Fold2影像曝光:IMX866主摄、潜望长焦取消
天天实时:一键获取测试脚本,轻松验证“TSBS 时序数据库性能基准测试报告”
天天快看点丨windows系统 批量处理文件名称
Python Django投稿系统代码
环球今头条!日本最早将于2024年度在新东名高速公路部分区间设置自动驾驶车道
环球即时看!小姐姐秒种草!雅迪冠能摩登发布:独创复古女王风
当前速讯:你家乡上榜没?中国省级“癌症地图”出炉:肺癌列第一 “穷癌”下降“富癌”上升
3299元性价比封神!AMD Zen4 104MB缓存锐龙7 7800X3D价格公布
迅雷临时文件读取错误怎么回事?迅雷临时文件读取错误怎么解决?
色带打印机怎么换色带?色带的正确安装方法是什么?
win10版本号与操作系统版本号有什么区别?怎么查看win10版本号?
英雄联盟狮子狗叫什么?英雄联盟狮子狗连招介绍
诺基亚X3上市时间是什么时候?诺基亚X3手机参数
CloudCanal 落地 DB2 数据迁移同步功能
观天下!hdfs disk balancer 磁盘均衡器
全球百事通!Python 应用 - jieba 分词 1:进行批量文本分词_艽野尘梦 better 的博客 - CSDN 博客
全球滚动:数论分块简介
【速看料】Mysql之SQL语句基础1
环球快报:2磅蛋糕是几寸适合多少人吃_2磅蛋糕是几寸