變量聲明可以在你的程序里聲明一個變量,它以關(guān)鍵字var來聲明。根據(jù)聲明變量類型和值的不同,如存儲和計算 變量和屬性,存儲變量和屬性監(jiān)視,和靜態(tài)變量屬性,有著不同的聲明形式。(待改進) 所使用的聲明形式取決于變量所聲明的范圍和你打算聲明的變量類型。
注意:
你也可以在協(xié)議聲明的上下文聲明屬性,詳情參見類型屬性聲明。
下面的形式聲明了一個存儲型變量或存儲型變量屬性
var
variable name:type=expression
你可以在全局,函數(shù)內(nèi),或者在類和結(jié)構(gòu)體的聲明(context)中使用這種形式來聲明一個變量。當(dāng)變量以這種形式 在全局或者一個函數(shù)內(nèi)被聲明時,它代表一個存儲型變量。當(dāng)它在類或者結(jié)構(gòu)體中被聲明時,它代表一個存儲型變量屬性。
構(gòu)造器表達式可以被
和常量聲明相比,如果變量名是一個元祖類型,元祖的每一項的名字都要和初始化表達式一致。
正如名字一樣,存儲型變量的值或存儲型變量屬性存儲在內(nèi)存中。
如下形式聲明一個一個存儲型變量或存儲型屬性:
varvariable name:type{
get {
statements
}
set(setter name) {
statements
}
}
你可以在全局,函數(shù)體內(nèi)或者類,結(jié)構(gòu)體,枚舉,擴展聲明的上下文中使用這種形式的聲明。 當(dāng)變量以這種形式在全局或者一個函數(shù)內(nèi)被聲明時,它代表一個計算型變量。當(dāng)它在類,結(jié)構(gòu)體,枚舉,擴展聲明的上下文 中中被聲明時,它代表一個計算型變量屬性。
getter用來讀取變量值,setter用來寫入變量值。setter子句是可選擇的,只有g(shù)etter是必需的,你可以將這些語句 都省略,只是簡單的直接返回請求值,正如在只讀計算屬性(read-only computed properites)中描述的那樣。 但是如果你提供了一個setter語句,你也必需提供一個getter語句。
setter的名字和圓括號內(nèi)的語句是可選的。如果你寫了一個setter名,它就會作為setter的參數(shù)被使用。如果你不寫setter名, setter的初始名為newValue,正如在seter聲明速記(shorthand setter declaration)中提到的那樣。
不像存儲型變量和存儲型屬性那樣,計算型屬性和計算型變量的值不存儲在內(nèi)存中。
獲得更多信息,查看更多關(guān)于計算型屬性的例子,請查看計算型屬性(computed properties)一節(jié)。
你可以用willset和didset監(jiān)視器來聲明一個存儲型變量或?qū)傩?。一個包含監(jiān)視器的存儲型變量或?qū)傩园慈缦碌男问铰暶鳎?/p>
varvariable name:type= expression {
willSet(setter name) {
statements
}
didSet(setter name) {
statements
}
}
你可以在全局,函數(shù)體內(nèi)或者類,結(jié)構(gòu)體,枚舉,擴展聲明的上下文中使用這種形式的聲明。 當(dāng)變量以這種形式在全局或者一個函數(shù)內(nèi)被聲明時,監(jiān)視器代表一個存儲型變量監(jiān)視器; 當(dāng)它在類,結(jié)構(gòu)體,枚舉,擴展聲明的上下文中被聲明時,監(jiān)視器代表屬性監(jiān)視器。
你可以為適合的監(jiān)視器添加任何存儲型屬性。你也可以通過重寫子類屬性的方式為適合的監(jiān)視器添加任何繼承的屬性 (無論是存儲型還是計算型的),參見重寫屬性監(jiān)視器(overriding properyt observers)。
初始化表達式在類或者結(jié)構(gòu)體的聲明中是可選的,但是在其他地方是必需的。無論在什么地方聲明, 所有包含監(jiān)視器的變量聲明都必須有類型注釋(type annotation)。
當(dāng)變量或?qū)傩缘闹当桓淖儠r,willset和didset監(jiān)視器提供了一個監(jiān)視方法(適當(dāng)?shù)幕貞?yīng))。 監(jiān)視器不會在變量或?qū)傩缘谝淮纬跏蓟瘯r不會被運行,它們只有在值被外部初始化語句改變時才會被運行。
willset監(jiān)視器只有在變量或?qū)傩灾当桓淖冎斑\行。新的值作為一個常量經(jīng)過過willset監(jiān)視器,因此不可以在 willset語句中改變它。didset監(jiān)視器在變量或?qū)傩灾当桓淖兒罅⒓催\行。和willset監(jiān)視器相反,為了以防止你仍然 需要獲得舊的數(shù)據(jù),舊變量值或者屬性會經(jīng)過didset監(jiān)視器。這意味著,如果你在變量或?qū)傩宰陨淼膁idiset監(jiān)視器語句 中設(shè)置了一個值,你設(shè)置的新值會取代剛剛在willset監(jiān)視器中經(jīng)過的那個值。
在willset和didset語句中,setter名和圓括號的語句是可選的。如果你寫了一個setter名,它就會作為willset和didset的參數(shù)被使用。如果你不寫setter名, willset監(jiān)視器初始名為newvalue,didset監(jiān)視器初始名為oldvalue。
當(dāng)你提供一個willset語句時,didset語句是可選的。同樣的,在你提供了一個didset語句時,willset語句是可選的。
獲得更多信息,查看如何使用屬性監(jiān)視器的例子,請查看屬性監(jiān)視器(prpperty observers)一節(jié)。
class關(guān)鍵字用來聲明類的計算型屬性。static關(guān)鍵字用來聲明類的靜態(tài)變量屬性。類和靜態(tài)變量在類型屬性(type properties)中有詳細討論。
變量聲明語法
變量聲明 → 變量聲明頭(Head) 模式構(gòu)造器列表
變量聲明 → 變量聲明頭(Head) 變量名 類型注解 代碼塊
變量聲明 → 變量聲明頭(Head) 變量名 類型注解 getter-setter塊
變量聲明 → 變量聲明頭(Head) 變量名 類型注解 getter-setter關(guān)鍵字(Keyword)塊
變量聲明 → 變量聲明頭(Head) 變量名 類型注解 構(gòu)造器 可選 willSet-didSet代碼塊
變量聲明頭(Head) → 特性(Attributes)列表 可選 上一篇:Swift for-in循環(huán)下一篇:Swift解決實例之間的循環(huán)強引用