Swift和OC混编-1_yokan_de_s
更新时光:2023-08-24 16:37:56 iOS 55次
标签:
现在的框架还是OC的比较多,虽然大部分都支持了Swift一旦遇到只支持OC的,还是需要用Swift调用OC,相反如果遇到一个OC的老模块不能使用了,那么编写一个新的Swift模块,也同时需要OC调用SwiftSwift调用OC在Swift项目里面创建OC会提示需不需要生成桥接文件,一般是默认生成会多一个targetname-Bridging-Header.h这样的一个桥接文件*****如果不小心点到了Don‘t Create也没事(正常情况是默认生成不用手动去弄)1.创建一个he...
现代的框架图更是OC的特别多,虽大部位都能够了Swift当碰见只能够OC的,更是需求用Swift获取OC,反向假设碰见是其中一个OC的老信息模块电源可以食用了,那 撰写是其中一个新的Swift信息模块电源,也一同需求OC获取Swift
Swift调用OC
*****如果不小心点到了Don‘t Create也没事(正常情况是默认生成不用手动去弄)
1.创立个header.h,简称都是新好项目名-Bridging-Header.h这种我在这个新好项目叫test,特别都是test-Bridging-Header.h2.在building setting里面添加这个文件的路径?
@interface Person : NSObject
@property (nonatomic,strong) NSString *name;
@property (nonatomic,assign) int age;
@end
搭建个Person类,定议个name攻击速度,个age攻击速度
var p = Person()
print(p.name) //空字符串
print(p.age) //0
可不可以看自定义页的混编,Swift获取OC的类,会自定义页导出值,词有Int会自定义页为0,name会自定义页为空字段串
.h写上
-(instancetype)initWithName:(NSString *)name age:(int)age;
.m写上
-(instancetype)initWithName:(NSString *)name age:(int)age
{
if (self = [super init]) {
self.name = name;
self.age = age;
}
return self;
}
var p = Person(name: "yk", age: 120)
就能通常的起始化了,比较适合特别注意的是,在此的Int是Int32而不会是64
倘若把默认化设置成返回了nil
-(instancetype)initWithName:(NSString *)name age:(int)age
{
// if (self = [super init]) {
// self.name = name;
// self.age = age;
// }
return nil;
}
那麼不怕怎们赋值都不怎么也会有作用了
var p = Person(name: "yk", age: 120)
print(p.name) //空字符串
print(p.age) //0
p.name = "yk"
p.age = 10
print(p.name) //空字符串
print(p.age) //0
赋值函数值并不会起反响,因为装得了很好象框架做个供选择项的操作,而是并不根本不一样
函数冲突和类名冲突
比如指数函数值和类名不兼容,优先权取用Swift自己准备的指数函数值和类 我希望有这样个场景设计,OC是其次方库,变量名没办法改,Swift也没办法修订,但又一定都会进行OC的变量 Swift 的函数值是:func sum(_ a:Int,_ b:Int) -> Int {
a - b
}
OC的函数公式是:
int sum(int a,int b)
{
return a + b;
}
这5个涵数取用方法那样,机系统会自定义取用Swift的涵数
@_silgen_name("sum")
func newSum(_ a:Int32,_ b:Int32) -> Int32
print(sum(10, 20)) // -10
print(newSum(10, 20)) //30
倘若肯定程度要启用OC的数学方程可给OC数学方程立即排列顺序名,准备这些的Int肯定程度要转型为Int32
OC调用Swift
Swift的代码是什么希望给OC用不得不继续NSObject@objcMembers class Person :NSObject {
var name:String
var age:Int
init(name:String,age:Int) {
self.name = name
self.age = age
}
}
如这里Person类
但是还是要倒入头文书target-swift.h 在这其中target也是工程名,打比方我得还是test-swift.h
********要留意,一定的要编译,不编译是会刷新页面test-swift.h文件资料的
void ptr()
{
Person *person = [[Person alloc] initWithName:@"yk" age:10];
person.name = @"tk";
person.age = 20;
NSLog(@"%@,%d",person.name,person.age); //2021-05-21 19:08:03.396944+0800 test[1965:162612] tk,20
}
第二步就能正常人的在OC中间读取Swift了
@objc关键字
适用显示名@objc(YKPerson)
@objcMembers class Person :NSObject {
var name:String
var age:Int
init(name:String,age:Int) {
self.name = name
self.age = age
}
}
ptr()
这种为了能迎合了OC的菜系,我也写了YKPerson
void ptr()
{
YKPerson *person = [[YKPerson alloc] initWithName:@"yk" age:10];
person.name = @"tk";
person.age = 20;
NSLog(@"%@,%d",person.name,person.age); //2021-05-21 19:08:03.396944+0800 test[1965:162612] tk,20
}
这也得跟改
皇冠新体育APP相关的文章
- 皇冠新体育APP爬虫爬取个人主页信息(拖拽验证码验证)+Linux部署_J-Shawn_python个人信息提取
- chorme浏览器(内容来自极客李兵老师的浏览器工作原理和实践)_syt_1013_chrome 实用程序 storage service是干嘛的
- 清除Chrome的缓存、Cookie_Undefined-wechat
- JS控制的style对象_折桂怀橘_js控制style
- 皇冠新体育APP:VUE 在第三方封装组件中自定义样式(各框架通用)_何浩翔_vue组件自定义样式
- 皇冠新体育APP:【webstrom + chrome 调试工具 调试vue】_千帆过尽@
- chrome的Views概述_三雷科技
- (Scrapy框架)爬虫获取新冠疫情数据升级版 | 爬虫案例_剑客阿良_ALiang_cookies_enabled': false, 'newspider_module'
- Chrome和Firefox的命令行参数_ffzzyy_firefox 命令行参数
- 皇冠新体育APP:Chrome设置_Marshall3572
- Chrome实现自动化测试:录制回放网页动作_九柄说测试
- 皇冠新体育APP:谷歌浏览器打不开是什么原因_虎观~艺_谷歌浏览器无法打开网页是什么原因
- 皇冠新体育APP:html设置input圆角矩形_html5中关于input使用方法的改变_YHhhh18
- selenium--关闭窗口,指定窗口大小,前进,后退,刷新等等_春风又。_selenium 关闭当前窗口
- [002] Robot Framework + SeleniumLibrary搭建_harry0913
- uirecorder遇到问题记录_你加班的bug我提的_uirecorder init失败