Swift:随手记

简单里的小知识点。


实现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的属性在没有初始化时就同时被多个线程访问,则无法保证该属性只会被初始化一次。

猜你喜欢

转载自blog.csdn.net/weixin_34128237/article/details/86963196