swift 构造器

构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置实例中每个存储型属性的初始值和执行其他必须的设置或初始化工作。

通过定义构造器来实现构造过程,这些构造器可以看做是用来创建特定类型新实例的特殊方法。与oc中的构造器不同,swift的构造器无需返回值,它们的主要任务是保证新实例在第一次使用前完成正确的初始化。

类的实例也可以通过定义析构器在实例释放之前执行特定的清除工作。

存储属性的初始赋值

类和结构体在创建实例时,必须为所有存储属性设置合适的初始值。存储型属性的值不能处于一个未知的状态
可以在构造器中为存储型属性赋初值,可以在定义属性使为其设置默认值。

构造器

构造器在创建某个特定类型的新实例是被调用。
    struct Fahrenheit {
        var temperature:Double
        init() {
            temperature = 32.0
        }
    }
    var f = Fahrenheit()
        print("\(f.temperature)")

默认属性值

如前所述,可以在构造器中为存储型属性设置初始值。同样,可以在属性声明时为其设置默认值。
   struct Fahrenheit {
        var temperature:Double = 32.0
    }

自定义构造过程

构造参数

自定义构造过程时,可以在定义中提供构造参数,指定所需值的类型和名字。构造参数的功能和语法跟函数和方法的参数相同。
下面例子中定义了一个包含摄氏度的结构体Celsius。它定义了两个不同的构造器:
    struct Celsius {
        var temperatureInCelsius:Double
        init(fromFahrenheit fahrenheit:Double) {
            temperatureInCelsius = (fahrenheit - 32.0) / 1.8
        }
        init(fromKelvin kelvin:Double) {
            temperatureInCelsius = kelvin - 273.15
        }
    }
        let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
        let freezingPointOfWater = Celsius(fromKelvin:2713.15)

参数的内部名称和外部名称

跟函数和方法参数相同,构造参数也拥有一个在构造器内部使用的参数名字和一个在调用构造器时使用的外部参数名字。
然而,构造器并不像函数和方法那样在括号前有一个可辨别的名字。因此在调用构造器时,主要通过构造器中的参数名和类型来确定应该被调用的构造器。正因为参数如此重要,如果你在定义构造器时没有提供参数的外部名字,swift会为构造器的每个参数自动生成一个跟内部名字相同的外部名。
   struct Color {
        let red,green,blue:Double
        init(red:Double,green:Double,blue:Double) {
            self.red = red
            self.green = green
            self.blue = blue
        }
        
        init(white:Double) {
            red = white
            green = white
            blue = white
        }
    }
 let magenta = Color(red:1.0,green:0.0,blue:1.0)
        let halfGray = Color(white:0.5)
如果不通过外部参数名字传值,没有办法调用这个构造器。只要构造器定义了某个外部参数名,必须使用它。

不带外部名的构造器参数

你可能感兴趣的:(swift,swift,构造器)