
Swift語言教程基礎(chǔ)數(shù)據(jù)類型
14頁Swift語言教程基礎(chǔ)數(shù)據(jù)類型基礎(chǔ)類型雖然Swift是一個為開發(fā)iOS和OS X app設(shè)計的全新編程語言,但是Swift的很多特性還是跟C和Objective-C相似Swift也提供了與C和Objective-C類似的基礎(chǔ)數(shù)據(jù)類型,包括整形Int、浮點數(shù)Double和Float、布爾類型Bool以及字符串類型StringSwift還提供了兩種更強大的基本集合數(shù)據(jù)類型,Array和Dictionary,更詳細的內(nèi)容可以參考:Collection Types跟C語言一樣,Swift使用特定的名稱來定義和使用變量同樣,Swift中也可以定義常量,與C語言不同的是,Swift中的常量更加強大,在編程時使用常量能夠讓代碼看起來更加安全和簡潔除了常見的數(shù)據(jù)類型之外,Swift還集成了Objective-C中所沒有的“元組”類型,可以作為一個整體被傳遞元組也可以成為一個函數(shù)的返回值,從而允許函數(shù)一次返回多個值Swift還提供了可選類型,用來處理一些未知的不存在的值可選類型的意思是:這個值要么存在,并且等于x,要么根本不存在可選類型類似于Objective-C中指針的nil值,但是nil只對類(class)有用,而可選類型對所有的類型都可用,并且更安全。
可選類型是大部分Swift新特性的核心可選性類型只是Swift作為類型安全的編程語言的一個例子Swift可以幫助你更快地發(fā)現(xiàn)編碼中的類型錯誤如果你的代碼期望傳遞的參數(shù)類型是String的,那么類型安全就會防止你錯誤地傳遞一個Int值這樣就可以讓編程人員在開發(fā)期更快地發(fā)現(xiàn)和修復問題常量和變量常量和變量由一個特定名稱來表示,如maximumNumberOfLoginAttempt 或者 welcomeMessage常量所指向的是一個特定類型的值,如數(shù)字10或者字符”hello”變量的值可以根據(jù)需要不斷修改,而常量的值是不能夠被二次修改的常量和變量的聲明常量和變量在使用前都需要聲明,在Swift中使用let關(guān)鍵詞來聲明一個常量,var關(guān)鍵詞聲明一個變量如下面例子let maximumNumberOfLoginAttempts = 10var currentLoginAttempt = 0以上代碼可以理解為:聲明一個叫maximumNumberOfLoginAttempts的值為10的常量然后聲明一個變量currentLoginAttempt初始值為0在這個例子中,最大的登錄嘗試次數(shù)10是不變的,因此聲明為常量。
而已經(jīng)登錄的嘗試次數(shù)是可變的,因此定義為變量也可以在一行中聲明多個變量或常量,用,號分隔:var x = 0.0, y = 0.0, z = 0.0注:如果一個值在之后的代碼中不會再變化,應該用let關(guān)鍵詞將它聲明為常量變量只用來存儲會更改的值類型注解在聲明常量和變量時,可以使用注解來注明該變量或常量的類型使用:號加空格加類型名在變量或常量名之后就可以完成類型注解下面的例子就是聲明了一個變量叫welcomeMessage,注解類型為字符串String:var welcomeMessage: String分號 “:” 在這的作用就像是在說:…是…類型的,因此上述代碼可以理解為:聲明一個叫welcomeMessage的變量,它的類型是String這個類型注解表明welcomeMessage變量能無誤地存儲任何字符串類型的值,比如welcomeMessage = “hello”注:實際編程中很少需要使用類型注解,定義常量或者變量的時候Swift已經(jīng)根據(jù)初始化的值確定了類型信息Swift幾乎都可以隱式的確定變量或常量的類型,詳見:?Type Safety and Type Inference而上面的welcomeMessage的例子中,初始化值沒有被給出,所以更好的辦法是指定welcomeMessage變量的類型而不是讓Swift隱式推導類型。
常量和變量的命名Swift中可以使用幾乎任何字符來作為常量和變量名,包括Unicode,比如:let π = 3.14159let 你好 = "你好世界"let = "dogcow"但是名稱中不能含有數(shù)學符號,箭頭,無效的Unicode,橫線-和制表符,且不能以數(shù)字開頭,盡管數(shù)字可以包含在名稱里一旦完成了聲明,就不能再次聲明相同名稱的變量或常量,或者改變它的類型變量和常量也不能互換注:如果你想用Swift保留字命名一個常量或者變量,你可以用 ` 符號把命名包圍起來盡管如此,除非處于特別的意圖,盡量不要使用保留字作為變量/常量名可以改變變量的值為它聲明的類型的其它值,如下的例子里,變量friendlyWelcome的值從“Hello!”被修改為”Bonjour!”:var friendlyWelcome = “hello!”friendlyWelcome = “Bonjour!”// friendlyWelcome is now “Bonjour!”與變量不同的是,常量的值一旦確定就不能修改如果想嘗試改變一個常量的值,編譯代碼時就會報錯let languageName = "Swift"languageName = "Swift++"http:// this is a compile-time error - languageName cannot be changed輸出常量和變量Swift使用println來輸出變量或者常量:println(friendlyWelcome)// prints “Bonjour!”println是一個全局函數(shù),用來輸出一個值,最后輸出一個換行。
在Xcode中,println輸出在控制臺中print函數(shù)也類似,只不過最后不會輸出換行println函數(shù)一般輸出一個字符串println("This is a string")// prints "This is a string"println函數(shù)還可以格式化輸出一些日志信息,就像是Cocoa中NSLog函數(shù)的行為一樣,可以包括一些常量和變量本身Swift在字符串中插入變量名作為占位符,使用反斜杠()來提示Swift替換變量/常量名為其實際的值,如:println(“The current value of friendlyWelcome is (friendlyWelcome)”) // prints “The current value of friendlyWelcome is Bonjour!”注:關(guān)于格式化字符的詳見?String Interpolation注釋不參與編譯的語句稱為注釋,注釋可以提示你代碼的意圖Swift中的注釋和C語言中的一樣,有單行注釋//this is a comment和多行注釋,使用/和/分隔/* this is also a comment,but written over multiple lines */和C語言不同的是,多行注釋可以嵌套,你需要先開始一個多行注釋,然后開始第二個多行注釋,關(guān)閉注釋的時候先關(guān)閉第二個,然后是第一個。
如下/* this is the start of the first multiline comment/* this is the second, nested multiline comment */this is the end of the first multiline comment */這樣可以方便地在大段已注釋的代碼塊中繼續(xù)添加注釋分號和其它一些編程語言不同,Swift不需要使用分號 ; 來分隔每一個語句當然你也可以選擇使用分號,或者你想在一行中書寫多個語句let cat = ""; println(cat)// prints ""整數(shù)整數(shù)就是像42和-23這樣不帶分數(shù)的數(shù)字,包括有符號(正數(shù),負數(shù),0)和無符號(正數(shù),0)Swift提供了8、16、32和64位的數(shù)字形式,和C語言類似,可以使用8位的無符號整數(shù)UInt8,或者32位的整數(shù)Int32.像其他Swift類型一樣,這些類型名的首字母大寫整數(shù)邊界使用min或max值來獲取該類型的最大最小值,如:let minValue = UInt8.min // minValue is equal to 0, and is of type UInt8let maxValue = UInt8.max // maxValue is equal to 255, and is of type UInt81.2.這些值邊界值區(qū)分了整數(shù)的類型(比如UInt8),所以可以像該類型的其他值一樣被用在表達式中而不用考慮益處的問題。
Int類型一般來說,編程人員在寫代碼時不需要選擇整數(shù)的位數(shù),Swift提供了一種額外的整數(shù)類型Int,是和當前機器環(huán)境的字長相同的整數(shù)位數(shù)在32位機器上,Int和Int32一樣大小在64位機器上,Int和Int64一樣大小除非你確實需要使用特定字長的正數(shù),盡量使用Int類型這保證了代碼的可移植性即使在32位的平臺上,Int也可以存儲-2,147,483,648 到2,147,483,647范圍內(nèi)的值,這對大部分正數(shù)來講已經(jīng)足夠了UInt類型Swift還提供了一種無符號類型UInt,同理也是和當前機器環(huán)境的字長相等在32位機器上,UInt和UInt32一樣大小在64位機器上,UInt和UInt64一樣大小注:只有顯式的需要指定一個長度跟機器字長相等的無符號數(shù)的時候才需要使用UInt,其他的情況,盡量使用Int,即使這個變量確定是無符號的都使用Int保證了代碼的可移植性,避免了不同數(shù)字類型之間的轉(zhuǎn)換詳見Type Safety and Type Inference.5、浮點數(shù)浮點數(shù)就是像3.14159,0.1,-273.15這樣帶分數(shù)的數(shù)字浮點數(shù)可以表達比Int范圍更廣(更大或更?。┑臄?shù)值swift支持兩種帶符號浮點數(shù)類型:Double類型能表示64位的有符號浮點數(shù)。
當需要表的數(shù)字非常大或者精度要求非常高的時候可以使用Double類型Float類型能表示32為的有符號浮點數(shù)當需要表達的數(shù)字不需要64位精度的時候可以使用Float類型注 Double 至少有15位小數(shù),F(xiàn)loat至少有6位小數(shù)合適的浮點數(shù)小數(shù)位數(shù)取決于你代碼里需要處理的浮點數(shù)范圍6、類型安全和類型推導Swift是一種類型安全的語言類型安全就是說在編程的時候需要弄清楚變量的類型如果您的代碼部分需要一個字符串,你不能錯誤地傳遞一個整數(shù)類型因為Swift是類型安全的,它會在編譯的時候就檢查你的代碼,任何類型不匹配時都會報錯這使得編程人員能夠盡快捕獲并盡可能早地在開發(fā)過程中修正錯誤類型檢查可以在使用不同類型的值時幫助避免錯誤但是,這并不意味著你必須指定每一個常量和變量所聲明的類型如果不指定你需要的類型,Swift使用類型推導來指定出相應的類型類型推導使編譯器在編譯的時候通過你提供的初始化值自動推導出特定的表達式的類型類型推導使Swift比起C或Objective-C只需要更少的類型聲明語句常量和變量仍然顯式類型,但大部分指定其類型的工作Swift已經(jīng)為你完成了當你聲明一個常量或變量并給出初始值類型的時候,類型推導就顯得特別有用。
這通常是通過給所聲明的常量或。