在 Swift 中,构造过程是为了确保新创建的实例在首次使用前完成必要的设置和初始化。Swift 使用构造器(Constructors)来实现构造过程。构造器是特殊的方法,与类、结构体或枚举关联。

以下是关于 Swift 构造过程的基本信息和使用方法:

存储属性的初始化

构造器负责为类、结构体或枚举的存储属性设置初始值。可以通过为存储属性提供默认值或在构造器中设置初始值来完成初始化。
struct Fahrenheit {
    var temperature: Double
    
    init() {
        temperature = 32.0
    }
}

var f = Fahrenheit()
print(f.temperature)  // 输出 32.0

构造器参数

构造器可以接受参数,用于设置存储属性的初始值。参数名和参数类型在构造器中定义。
struct Celsius {
    var temperature: Double
    
    // 构造器参数
    init(fromFahrenheit fahrenheit: Double) {
        temperature = (fahrenheit - 32.0) * 5.0 / 9.0
    }
    
    init(fromKelvin kelvin: Double) {
        temperature = kelvin - 273.15
    }
}

let boilingPoint = Celsius(fromFahrenheit: 212.0)
print(boilingPoint.temperature)  // 输出 100.0

构造过程中的常量属性

可以在构造过程中给常量属性赋值一次,但之后不能再修改。
class SomeClass {
    let constantProperty: Int
    
    init() {
        constantProperty = 42
    }
}

默认构造器

如果类、结构体或枚举的所有存储属性都有默认值,系统会自动生成一个无参数的默认构造器。
struct Color {
    var red = 0.0, green = 0.0, blue = 0.0
}

let black = Color()
print(black.red)    // 输出 0.0
print(black.green)  // 输出 0.0
print(black.blue)   // 输出 0.0

构造器代理

构造器可以调用其他构造器来执行部分构造过程。这称为构造器代理。
struct Size {
    var width = 0.0, height = 0.0
}

struct Point {
    var x = 0.0, y = 0.0
}

struct Rect {
    var origin = Point()
    var size = Size()
    
    // 构造器代理
    init(center: Point, size: Size) {
        let originX = center.x - size.width / 2
        let originY = center.y - size.height / 2
        self.init(origin: Point(x: originX, y: originY), size: size)
    }
    
    // 实际构造器
    init(origin: Point, size: Size) {
        self.origin = origin
        self.size = size
    }
}

let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))
print(centerRect.origin.x, centerRect.origin.y)  // 输出 2.5 2.5

可选类型的构造器

构造器可以返回可选类型,表示构造过程可能失败。
struct Animal {
    var species: String
    
    // 可失败构造器
    init?(species: String) {
        if species.isEmpty {
            return nil
        }
        self.species = species
    }
}

let cat = Animal(species: "Cat")
let emptySpecies = Animal(species: "")
print(cat)           // 输出 Optional(Animal(species: "Cat"))
print(emptySpecies)  // 输出 nil

以上是一些关于 Swift 构造过程的基本用法。构造过程是 Swift 中初始化实例的关键部分,它确保实例在使用前处于正确的状态。


转载请注明出处:http://www.zyzy.cn/article/detail/14433/Swift