简单里的小知识点。
实现pch功能
@_exported用于在自己模块中导出其他模块。
比如,自己定义了一个 A 模块。
在 A 模块中定义:
@_exported import UIKit
当我们引入 A 模块(import A)时,可以使用 UIKit 中的符号。
Enum的mutating
:
enum MyEnum {
case high, low, off
mutating func change() {
switch self {
case .high:
self = .low
case .low:
self = .off
case .off:
self = .high
}
}
}
var status = MyEnum.high // high
status.change() // low
status.change() // off
status.change() // high
类、结构体和枚举要使用大驼峰命名方法,方法和属性是用小驼峰命名方法。
所有结构体都有一个自动生成的成员逐一构造器,用于初始化新结构体实例中成员的属性。与结构体不同,类实例没有默认的成员逐一构造器。
结构体和枚举是值类型。实际上,在 Swift 中,所有的基本类型:整数(Integer)、浮 点数(floating-point)、布尔值(Boolean)、字符串(string)、数组(array)和字典(dictionary),都是 值类型,并且在底层都是以结构体的形式所实现。
属性将值跟特定的类、结构或枚举关联。存储属性存储常量或变量作为实例的一部分,而计算属性计算(不是存储)一个值。计算属性可以用于类、结构体和枚举,存储属性只能用于类和结构体。存储属性和计算属性通常与特定类型的实例关联。但是,属性也可以直接作用于类型本身,这种属性称为类型属性。另外,还可以定义属性观察器来监控属性值的变化,以此来触发一个自定义的操作。属性观察器可以添加到自己定义的存储属性上,也可以添加到从父类继承的属性上。
必须将延迟存储属性声明成变量(使用var关键字),因为属性的初始值可能在实例构造完成之后才会得到。而常量属性在构造过程完成之前必须要有初始值,因此无法声明成延迟属性。
如果一个被标记为lazy的属性在没有初始化时就同时被多个线程访问,则无法保证该属性只会被初始化一次。
网友评论