學習Swift 構造器(上)

2022-09-17 10:30:15 字數 1973 閱讀 7299

構造過程是為了使用某個類、結構體或列舉型別的例項而進行的準備過程。這個過程包含了為例項中的每個儲存型屬性設定初始值和為其執行必要的準備和初始化任務。

構造過程是通過定義構造器(initializers)來實現的,這些構造器可以看做是用來建立特定型別例項的特殊方法。與 objective-c 中的構造器不同,swift 的構造器無需返回值,它們的主要任務是保證新例項在第一次使用前完成正確的初始化。

類和結構體在例項建立時,必須為所有儲存型屬性設定合適的初始值。儲存型屬性的值不能處於乙個未知的狀態。

你可以在構造器中為儲存型屬性賦初值,也可以在定義屬性時為其設定預設值。以下章節將詳細介紹這兩種方法。

注意:當你為儲存型屬性設定預設值或者在構造器中為其賦值時,它們的值是被直接設定的,不會觸發任何屬性觀測器。

init()

struct fahrenheit 

}// 呼叫了fahrenheit的構造器 temperature在構造過程中被設定了

let fahrenheit = fahrenheit()

print(fahrenheit.temperature)

// 列印出: 32.0

在實際開發中我們經常會自定義構造過程,我們可以為自定義構造器提供引數,為其提供自定義構造所需值的型別和名字。

struct celsius 

init(fromkelvin kelvin: double)

// 以上宣告了兩種構造器,可以根據情況選擇任何一種來建立新的例項

}let boilingpointofwater = celsius(fromfahrenheit: 212.0)

print(boilingpointofwater.temperatureincelsius)

// 列印出 100.0

let freezingpointofwater = celsius(fromkelvin: 273.15)

print(freezingpointofwater.temperatureincelsius)

// 列印出 0.0

注意:如果宣告構造器沒有指定外部引數名,swift會生成乙個跟內部引數名一樣的外部引數名,用以區別不同的構造器

struct color 

init(white: double)

// 如果你不想指定外部引數名,可以用"_"

init(_ black: double)

}// 在自定義構造器中並沒有指定外部引數名,但是swift還是預設為我們生成了外部引數名

let redcolor = color(red: 1.0, yellow: 0.0, blue: 0.0)

let whitecolor = color(white: 1.0)

// 不指定外部引數名 "init(_ black: double)"

let blackcolor = color(0.0)

如果你定製的型別包含乙個邏輯上允許取值為空的儲存型屬性--不管是因為它無法在初始化時賦值,還是因為它可以在之後某個時間點可以賦值為空--你都需要將它定義為可選型別。可選型別的屬性將自動初始化為空nil,表示這個屬性是故意在初始化時設定為空的。

class surveyquestion

}

只要在構造過程結束前常量的值能確定,你可以在構造過程中的任意時間點修改常量屬性的值。

注意:對某個類例項來說,它的常量屬性只能在定義它的類的構造過程中修改;不能在子類中修改。

class surveyquestion

}

如果結構體對所有儲存型屬性提供了預設值且自身沒有提供定製的構造器,它們能自動獲得乙個逐一成員構造器。

struct size 

// 逐一構造器

let size = size(width: 11.0, height: 5.0)

Swift之構造器(上)

目錄 swift之構造器 上 swift之構造器 中 swift之構造器 下 swift賦予自定義型別更加豐富的功能,乙個顯著地方就是構造過程。swift可以為自定義型別設定構造器來初始化乙個例項。有關swift構造器的使用特點可以總結如下 1.構造器適用於類 結構體 列舉。是新的例項可用之前必須執...

Swift 對比學習Swift構造器

首先建立乙個類 實現方法如下 而當我們利用建構函式生成例項時有以下幾種方法 在oc的例子中,構造器initwithname age 內部呼叫了另乙個構造器,避免了 重複,下面來圍觀swift中如何實現。在swift中,當你建立乙個類或者結構體的時候,它們的屬性一定有初值 否則編譯不過,例如let a...

學習Swift 構造器 下

如果乙個類,結構體或列舉型別的物件,在構造自身的過程中有可能失敗,則為其定義乙個可失敗構造器,是非常有必要的。這裡所指的 失敗 是指,如給構造器傳入無效的引數值,或缺少某種所需的外部資源,又或是不滿足某種必要的條件等。為了妥善處理這種構造過程中可能會失敗的情況。你可以在乙個類,結構體或是列舉型別的定...