Swift--基礎資料型別 (Elementary Data Type)(一)

來源:互聯網
上載者:User

標籤:style   color   使用   os   io   strong   資料   ar   

不像更多語言中,X不要求你寫一個分號(;)在你的代碼中的每一個語句後,儘管能夠這樣做。然而,假設你想在一行中寫入多個單獨的語句分號是必需的:

.    1  letcat = "";println(cat)

.    2  // prints ""

資料類型

Integers

integers是整數,沒有小數部分,如42和-23。整數有符號(正,零或負的)或無符號(正或零).

Swift提供8,16,32,和64位形式的符號和不帶正負號的整數。這些整數遵循類似於C的命名慣例,在一個8位不帶正負號的整數類型UINT8,以及一個32位帶正負號的整數為Int32類型.

Integer Bounds

能夠用其最小和最大屬性訪問每一個整數類型的最小值和最大值

1 letminValue = UInt8.min // minValue is equal to 0, and is of type UInt8

2 letmaxValue = UInt8.max // maxValue is equal to 255, and is of type UInt8

這些屬性的值是適當的大小的號碼類型(如UINT8在上面的範例中),並
能夠在沿著同一類型的其他值的運算式,因此能夠使用。

Int

在大多數情況下,你並不須要挑選整數的特定大小在代碼中使用。Swift提供了一個額外的整數類型,int,它具有同樣的大小作為當前平台的本地字大小:
?在32位平台,詮釋的是相同大小的Int32。
?在64位平台,詮釋的是相同大小的Int64。
除非你須要用整數的特定大小的工作,總是使用int代碼中的整數值。這有助於代碼的一致性和互通性。即使在32位平台上,詮釋能夠儲存不論什麼值-2,147,483,648到2,147,483,647之間,而且是很多整數範圍足夠大。

UInt

Swift還提供了一個無符號的整數類型,UINT,它具有同樣的大小作為當前平台的本地字大小:
?在32位平台上,UINT是大小同樣的UInt32。
?在64位平台上,UINT是大小同樣的UInt64。

 

Floating-Point Numbers

浮點數與小數部分的數字,如3.14159,0.1,和-273.15。浮點類型能夠表示比整數類型更廣泛的範圍內的值,而且能夠儲存數字,
是更大或更小的比能夠儲存在一個Int。 SWIFT提供兩個有符號浮點數類型:
?雙代表一個64位浮點數字。使用它時,浮點值必須是很大的,或
特別精確。
?浮點表示一個32位浮點數字。使用它時,浮點值不須要64位精度。

Type Safety and Type Inference

Swift是一種型別安全的語言。型別安全的語言鼓舞你要搞清楚值的類型代碼能夠工作。假設您的代碼部分須要一個字串,你不能錯誤地傳遞一個詮釋。
由於Swift是型別安全的,它會運行編譯你的代碼和標誌的不論什麼類型不符的錯誤時類型檢查。這使您可以捕獲並儘可能早地在開發過程中修正錯誤。
類型檢查協助您避免錯誤,當您正在使用不同類型的值。可是,這並不意味著你必須指定每個常量和變數所聲明的類型。假設不指定值,你須要的類型,Swift使用型別推斷來制定出對應的類型。類型判斷使編譯器自己主動判斷出特定的運算式的類型時,它編譯你的代碼,僅僅需通過檢查您提供的值。
由於類型判斷,斯威夫特須要少得多的型別宣告不是語言,如C或Objective-C 。常量和變數仍然顯式類型,但大部分指定其類型的工作是為你做。
當你聲明一個常量或變數的初始值類型判斷是特別實用的。這一般是通過賦予文本值(或文字)到所聲明的地步了常量或變數進行。 (字面上的值是直接出如今源碼中的值,如以下的範例42和3.14159 。 )

比如,假設您指定42到一個新的常數常值,不用說它是什麼類型,Swift判斷出你想要的常量是一個詮釋,由於你已經初始化它與一些看起來像一個整數

.    1  letmeaningOfLife= 42

.    2  // meaningOfLife is inferred to be of typeInt

相同,假設你不指定類型的浮點字面值,Swift判斷出你想要建立一個Double

.    1  letpi = 3.14159

.    2  // pi is inferred to be of type Double

Swift總是選擇Double(而非Float)時判斷浮點數類型。
假設你把在一個運算式中整數和浮點常量,一個Double類型會從上下文判斷:

.    1  letanotherPi= 3 + 0.14159

.    2  // anotherPi is also inferred to be of typeDouble

 

Numeric Literals

整型常量能夠寫成:
?一個十進位數,不帶首碼
?一個位元,用首碼0b
?一個八位元,用0°首碼
?一個十六進位數,以0x首碼

全部這些整型常量的有17的十進位值:

.    1  letdecimalInteger= 17

2  letbinaryInteger = 0b10001 // 17 in binary notation

.     

3  letoctalInteger = 0o21 // 17 in octal notation

.     

4  lethexadecimalInteger = 0x11 // 17 inhexadecimal notation

.     

浮點文本能夠是十進位(不帶首碼)或十六進位(以0x首碼)。它們必須始終具有在小數點的兩側號碼(或十六進位數)。他們也能夠有一個可選的指數,由一個大寫或小寫e表示十進位浮點數表示,或大寫或小寫p表示十六進位浮點數

為十進位數用的exp指數,基數乘以10exp:

? 1.25e2means1.25×102,or125.0.

? 1.25e-2means1.25×10-2,or0.0125.

為十六進位數與EXP的指數,基部數乘以2EXP:

? 0xFp2means15×22,or60.0.??0xFp-2means15×2-2,or3.75.

全部這些浮點常量的有12.1875十進位值:

.    1  letdecimalDouble= 12.1875

.    2  letexponentDouble= 1.21875e1

.    3  lethexadecimalDouble= 0xC.3p0

數字文本能夠包括額外的格式,使它們更easy閱讀。這兩個整數和浮點數能夠被填充
有額外的零,而且能夠包括底線,以協助可讀性。不管類型的格式影響文本的基本價值:

.    1  letpaddedDouble= 000123.456

.    2  letoneMillion= 1_000_000

.    3  letjustOverOneMillion= 1_000_000.000_000_1

 

Numeric Type Conversion

使用Int類型的代碼中的全部通用的整型常量和變數,即使它們是已知的非負。在日常生活中使用預設的整數類型是指整型常量和變數是在代碼中直接互操作,並將匹配的類型判斷為整數文字值。
僅使用時,特別須要他們手頭的任務,其它整數類型,由於從外部來源明白大小的資料,或者對效能,記憶體使用量情況,或其它必要的最佳化。在這些情況下使用顯式大小的類型,能夠捕捉不論什麼意外溢出值和隱式記錄所使用的資料的性質。

Integer Conversion

能夠儲存在一個整數常量或變數數的範圍是不同的每一個數值類型。一個INT8常量或變數能夠儲存數-128到127之間,而一個UINT8常量或變數能夠儲存0到255之間的數字。一個數字,將不會放入一個大小的整數類型的常量或變數被報告為錯誤時你的代碼被編譯:

.    1  letcannotBeNegative: UInt8 = -1

.    2  // UInt8 cannot store negative numbers, andso this will report an error

.    3  lettooBig: Int8= Int8.max + 1

.    4  // Int8 cannot store a number larger thanits maximum value,

.    5  // and so this will also report an error

由於每一個數字類型能夠儲存不同的值的範圍,你必須選擇添?在逐案基礎上數值類型的轉換。這樣的選擇適用的做法能夠防止隱藏的轉換錯誤,並協助作出明白在你的代碼的類型轉換意圖。
要轉換一個特定的數字類型到還有一個,你初始化與現有值所需類型的新號碼。在以下的範例中,恒定twoThousand是類型UInt16的的,而常數1是類型UINT8的。它們不能被一起直接添?的,由於它們是同樣類型的不。相反,該??示範範例調用UInt16的(一個)來建立一個變數的值初始化的新UInt16的,而且使用這個值來取代原來的:

.    1  lettwoThousand: UInt16 = 2_000

.    2  letone: UInt8 = 1

.    3  lettwoThousandAndOne= twoThousand + UInt16(one)

由於添加?了兩方都類型UInt16的眼下,除了是同意的。輸出常數(twoThousandAndOne)判斷為類型UInt16的,由於它是兩個UInt16的值的總和。
個SomeType(ofInitialValue)是預設的方式來調用雨燕類型的初始化,並傳遞一個初始值。在幕後,UInt16的有一個接受UINT8值的初始值設定項,因此這個初始化用於從現有UINT8作出新的UInt16的。你不能傳遞不論什麼類型的這裡,可是,它必須是一個類型的UInt16的提供了一個初始化。擴充現有類型,規定接受新的類型(包含你自己的類型定義)是覆蓋在擴充初始化。

Integer and Floating-Point Conversion

.    1  letthree = 3

.    2  letpointOneFourOneFiveNine= 0.14159

.    3  letpi = Double(three) +pointOneFourOneFiveNine

.    4  // pi equals 3.14159, and is inferred to beof type Double

這裡,常數3的值被用來建立Double類型的新值,從而使除了兩側是同樣類型的。假設沒有這個轉換到位,另外也不會被同意。
反過來也是如此浮點到整數的轉換,在一個整數類型能夠用double或float值進行初始化:

.    1  letintegerPi= Int(pi)

.    2  // integerPi equals 3, and is inferred tobe of type Int

當用於以這樣的方式初始化一個新的整數值的浮點值總是被截斷。這意味著,4.75變為4,和-3.9變得-3。

 

Type Aliases

類型別名為現有類型定義的替代名稱。您能夠定義類型別名與TYPEALIASkeyword。當你想用的名稱是上下文更適合於指現有類型類型別名是實用的,
與來自外部源的特定大小的資料時,如

typealias AudioSample= UInt16

一旦你定義了一個類型別名,你能夠使用別名的不論什麼地方你可能會使用原來的名稱:

.    1  varmaxAmplitudeFound= AudioSample.min

.    2  // maxAmplitudeFound is now 0

這裡,AudioSample被定義為一個別名UInt16的。由於它是一個別名,調用AudioSample.min實際上是調用UInt16.min,這對於maxAmplitudeFound變數提供初始值0。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.