@objc
根本问题要追到OC——Swift互调用的点上,在OC使用的过程中我们都知道是基于运行时的,那么在swift使用过程中,因为swift追求性能所以就不可能在运行时去查找这个类。 也就是说Swift 类型的成员或者方法在编译时就已经决定,而运行时便不再需要经过一次查找,而可以直接使用。那么在Swift调用OC时没有问题,如果OC调用swift代码的时候怎么办呢??
解决起来也很简单,在 Swift 类型文件中,我们可以将需要暴露给Objective-C使用的任何地方 (包括类,属性和方法等) 的声明前面加上@objc修饰符。注意这个步骤只需要对那些不是继承自NSObject的类型进行,如果你用 Swift 写的 class 是继承自NSObject的话,Swift 会默认自动为所有的非 private 的类和成员加上@objc。这就是说,对一个NSObject的子类,你只需要导入相应的头文件就可以在objective-c里使用这个类了。
@available 和 #available
Swift 2.0 中,引入了可用性的概念。对于函数,类,协议等,可以使用@available声明这些类型的生命周期依赖于特定的平台和操作系统版本。而#available用在判断语句中(if, guard, while等),在不同的平台上做不同的逻辑。
@available放在函数(方法),类或者协议前面。表明这些类型适用的平台和操作系统。
#available用在条件语句代码块中,判断不同的平台下,做不同的逻辑处理
Initializers
构造过程是为了使用某个类、结构体或枚举类型的实例而进行的准备过程。这个过程包含了为实例中的每个存储型属性设置初始值和为其执行必要的准备和初始化任务。
构造过程是通过定义构造器(Initializers)来实现的,这些构造器可以看做是用来创建特定类型实例的特殊方法。与Objective-C中的构造器不同,Swift的构造器无需返回值,它们的主要任务是保证新实例在第一次使用前完成正确的初始化
网友评论