美文网首页Swift
Swift:与OC混编

Swift:与OC混编

作者: 码小菜 | 来源:发表于2022-10-10 11:10 被阅读0次

    目录
    一,条件编译
    二,KVO/KVC
    三,Swift调用OC
    四,OC调用Swift
    五,字符串
    六,多线程

    一,条件编译

    1,代码标记
    2,条件编译
    3,信息打印
    4,版本检测
    5,API可用性
    6,程序入口

    二,KVO/KVC

    1,选择器
    • 必须是被@objcMembers@objc修饰的方法才可以定义选择器
    2,协议可选方法
    • 可以用@objc将方法定义为可选的,这种协议只能被类遵守
    3,dynamic
    • dynamic修饰的内容具有动态性,比如:调用方法会走runtime消息发送流程
    4,KVO/KVC
    • Swift支持KVO/KVC的条件:
    • 属性所在的类、监听器最终继承自NSObject
    • dynamic修饰对应的属性
    5,关联对象
    • 默认情况下,在extension中不可以添加存储属性
    6,资源名管理

    三,Swift调用OC

    1,条件
    • 新建一个桥接头文件,文件名格式默认为:{targetName}-Bridging-Header.h
    • 在头文件中#import需要暴露给Swift使用的文件
    2,OC代码
    3,Swift代码
    4,修改函数名
    • 如果C语言暴露给Swift的函数名跟Swift中其他的函数名冲突了,可以在Swift中使用@_silgen_name修改C语言的函数名

    四,OC调用Swift

    1,条件
    • Xcode默认生成了一个用于OC调用Swift的头文件,文件名格式是:{targetName}-Swift.h
    • Xcode会根据Swift代码生成对应的OC声明,并写入该头文件中
    2,Swift代码
    • 暴露给OC的类需要最终继承自NSObject
    • 使用@objc修饰需要暴露给OC的成员
    • 如果想要所有成员都暴露给OC,就使用@objcMembers来修饰类
    3,OC代码
    4,修改符号名
    • 可以通过@objc重命名暴露给OC的符号名(类名、属性名、方法名等)
    5,调用方法
    • 暴露给OC的类为何需要继承自NSObject

    OC调用方法会走消息发送流程,消息发送流程需要用到isa指针,而isa指针是在NSObject中定义的

    • OCSwift调用方法的区别?

    OC调用方法是走消息发送流程,不论是OC调用Swift方法,还是Swift调用OC方法;Swift调用方法是用虚表来实现的

    五,字符串

    1,String
    • 基本使用
    • 插入删除
    • 多行
    2,Substring
    • 子串类型不是String,而是Substring
    • Substring和它的base,共享一份数据
    • Substring发生修改或者转为String时,才会分配新的内存
    3,Character
    4,NSString
    • NSStringString可以用as直接互相转换
    • NSMutableString可以用as转换为String,反之则不可以

    六,多线程

    1,异步
    2,延迟
    3,once
    • dispatch_onceSwift中已被废弃
    • 可以用类型属性或者全局变量/常量来实现
    • 默认自带lazy + dispatch_once的效果
    4,加锁

    相关文章

      网友评论

        本文标题:Swift:与OC混编

        本文链接:https://www.haomeiwen.com/subject/saxxartx.html