Swift5.1 - oc到swift过渡

条件编译

#if os(macOS) || os(iOS)
// 操作系统

#elseif arch(x86_64) || arch(arm64)
// 架构

#elseif swift(<3) || swift(>=5)
// swift版本号

#elseif targetEnvironment(simulator)
// 模拟器

#elseif canImport(Foundation)
// 是否能导入某个模块

#else

#endif

系统版本号检查

if #available(iOS 13, macOS 10.12, *) {
    // .....
}

MARK、TODO、FIXME

swift调用oc

  • 新建1个桥接头文件,文件名格式默认为:{targetName}-Bridging-Header.h


  • 在 {targetName}-Bridging-Header.h 使用 #import "Person.h" 暴露给swift调用;



oc调用swift

  • Xcode 已经默认生成一个用于oc调用swift的头文件,文件名格式是{targetName}-Swift.h;


  • swift 暴露给oc的类最终继承NSObject

  • 使用@objc修饰的属性,是暴露给oc的成员;

  • 使用@objcMembers修饰的类,是暴露给oc使用类

    1. 代表默认所有成员都会暴露给oc(包括扩展中定义的成员)

swift文件中定义:

@objcMembers class Cat: NSObject {
    var age: Int
    var name: String
    
    init(age: Int, name: String) {
        self.age = age
        self.name = name
    }
    
    func eat() {
        print("cat eat")
    }
}

oc文件中调用:

#import "ocToSwift-Swift.h"

void test() {
    Cat *cat = [[Cat alloc] initWithAge:10 name:@"xiaohei"];
    [cat eat];
}

  • 可以通过@objc来重命名暴露给oc的类名、属性名、方法;
    swift文件中定义:
@objc(BYCat)
@objcMembers class Cat: NSObject {
    var age: Int
    
    @objc(color)
    var name: String
    
    init(age: Int, name: String) {
        self.age = age
        self.name = name
    }
    
    func eat() {
        print("cat eat")
    }
}

oc文件中调用:

#import "ocToSwift-Swift.h"

void test1() {
    BYCat *cat = [[BYCat alloc] initWithAge:20 name:@"白色"];
    cat.color = @"黑色";
}

选择器

  • 在swift中,使用#selector(name)定义一个选择器;
  • 必须被 @objcMembers@objc 修饰的方法,才能定义选择器;
@objcMembers class Cat: NSObject {
    func test1() { print("test1") }
    func test2() { print("test2") }
    func test() {
        perform(#selector(test1))
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 8,540评论 3 25
  • swift强势来袭,想要紧跟脚步,但之前OC的工程推倒重来在时间和实践上都有点伤神,混编就是这个过渡的桥梁,使...
    _skye阅读 10,623评论 8 22
  • 前言 点击简书写文章的时候发现还有几篇文章只写了标题,内容还没有写。所以现在趁着午休时间,把这篇文章完善一下。看到...
    CoderXLL阅读 32,680评论 12 31
  • 前言 记一次oc项目中引用swift开源库处理过程 开源库 测试使用这个开源库 该库太老,现在swif都到4.1了...
    DaZenD阅读 17,615评论 0 9
  • 前言: Swift语言出来后,可能新的项目直接使用Swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好...
    疯狂的电脑阅读 6,878评论 0 9