麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

swift學習筆記(1)-基礎語法

2019-11-09 15:45:23
字體:
來源:轉載
供稿:網友

基礎語法

聲明常量和變量

常量聲明了就不可以改變 常量和變量必須在使用前聲明,用 let 來聲明常量,用 var 來聲明變量。

let maximumNumberOfLoginAttempts = 10 var currentLoginAttempt = 0

如果你的代碼中有不需要改變的值,請使用 let 關鍵字將它聲明為常量。只將需要改變的值聲明為變量。

類型標注

var welcomeMessage: Stringvar red, green, blue: Double

聲明中的冒號代表著“是…類型” 一般來說你很少需要寫類型標注。如果你在聲明常量或者變量的時候賦了一個初始值,Swift可以推斷出這個常量或者變量的類型

常量和變量的命名

常量與變量名不能包含數學符號,箭頭,保留的(或者非法的)Unicode 碼位,連線與制表符。也不能以數字開頭,但是可以在常量與變量名的其他地方包含數字。

swift關鍵字作變量可用`包圍來使用,盡量不用

輸出常量和變量

PRint(friendlyWelcome)

Swift 用字符串插值(string interpolation)的方式把常量名或者變量名當做占位符加入到長字符串中,Swift 會用當前常量或變量的值替換這些占位符。將常量或變量名放入圓括號中,并在開括號前使用反斜杠將其轉義:

print("The current value of friendlyWelcome is /(friendlyWelcome)")

注釋

和oc一樣

分號

可加可不加 除非是一行寫多條語句

let cat = "a"; print(cat)

整數范圍

你可以訪問不同整數類型的 min 和 max 屬性來獲取對應類型的最小值和最大值:

let minValue = UInt8.min // minValue 為 0,是 UInt8 類型let maxValue = UInt8.max // maxValue 為 255,是 UInt8 類型

min 和 max 所傳回值的類型,正是其所對的整數類型(如上例UInt8, 所傳回的類型是UInt8),可用在表達式中相同類型值旁。

Int

一般來說,你不需要專門指定整數的長度。Swift 提供了一個特殊的整數類型Int,長度與當前平臺的原生字長相同:

UInt

Swift 也提供了一個特殊的無符號類型 UInt,長度與當前平臺的原生字長相同,不要使用UInt,除非你真的需要存儲一個和當前平臺原生字長相同的無符號整數。

浮點數

浮點類型比整數類型表示的范圍更大,可以存儲比 Int 類型更大或者更小的數字。Swift 提供了兩種有符號浮點數類型: Double表示64位浮點數。當你需要存儲很大或者很高精度的浮點數時請使用此類型。 Float表示32位浮點數。精度要求不高的話可以使用此類型。

類型安全和類型推斷

swift自動選擇類型,一般不聲明,浮點數選擇Double

數值型字面量

let decimalInteger = 17let binaryInteger = 0b10001 // 二進制的17let octalInteger = 0o21 // 八進制的17let hexadecimalInteger = 0x11 // 十六進制的17

下面的這些浮點字面量都等于十進制的12.1875:

let decimalDouble = 12.1875let exponentDouble = 1.21875e1let hexadecimalDouble = 0xC.3p0

數值類字面量可以包括額外的格式來增強可讀性。整數和浮點數都可以添加額外的零并且包含下劃線,并不會影響字面量:

let paddedDouble = 000123.456let oneMillion = 1_000_000let justOverOneMillion = 1_000_000.000_000_1

整數轉換

let twoThousand: UInt16 = 2_000let one: UInt8 = 1let twoThousandAndOne = twoThousand + UInt16(one)

整數和浮點數轉換

整數和浮點數的轉換必須顯式指定類型:

let three = 3let pointOneFourOneFiveNine = 0.14159let pi = Double(three) + pointOneFourOneFiveNinelet integerPi = Int(pi)// integerPi 等于 3,所以被推測為 Int 類型

當用這種方式來初始化一個新的整數值時,浮點值會被截斷。也就是說 4.75 會變成 4,-3.9 會變成 -3。

類型別名

類型別名就是給現有類型定義另一個名字。你可以使用typealias關鍵字來定義類型別名。

當你想要給現有類型起一個更有意義的名字時,類型別名非常有用。假設你正在處理特定長度的外部資源的數據:

typealias AudioSample = UInt16 定義了一個類型別名之后,你可以在任何使用原始名的地方使用別名:

var maxAmplitudeFound = AudioSample.min// maxAmplitudeFound 現在是 0

布爾值

Bool值為true或者false

元組

元組(tuples)把多個值組合成一個復合值。元組內的值可以是任意類型,并不要求是相同類型。

下面這個例子中,(404, “Not Found”) 是一個描述 HTTP 狀態碼(HTTP status code)的元組。

let http404Error = (404, "Not Found")//http404Error 的類型是 (Int, String),值是 (404, "Not Found")

一個類型為 (Int, String) 的元組 你可以把任意順序的類型組合成一個元組,這個元組可以包含所有類型。只要你想,你可以創建一個類型為 (Int, Int, Int) 或者 (String, Bool) 或者其他任何你想要的組合的元組。

你可以將一個元組的內容分解(decompose)成單獨的常量和變量,然后你就可以正常使用它們了:

let (statusCode, statusMessage) = http404Errorprint("The status code is /(statusCode)")// 輸出 "The status code is 404"print("The status message is /(statusMessage)")// 輸出 "The status message is Not Found"

如果你只需要一部分元組值,分解的時候可以把要忽略的部分用下劃線(_)標記:

let (justTheStatusCode, _) = http404Errorprint("The status code is /(justTheStatusCode)")// 輸出 "The status code is 404"

此外,你還可以通過下標來訪問元組中的單個元素,下標從零開始:

print("The status code is /(http404Error.0)")// 輸出 "The status code is 404"print("The status message is /(http404Error.1)")// 輸出 "The status message is Not Found"你可以在定義元組的時候給單個元素命名:let http200Status = (statusCode: 200, descr作為函數返回值時,元組非常有用。一個用來獲取網頁的函數可能會返回一個 (Int, String) 元組來描述是否獲取成功。和只能返回一個類型的值比較起來,一個包含兩個不同類型值的元組可以讓函數的返回信息更有用。請參考函數參數與返回值。

注意: 元組在臨時組織值的時候很有用,但是并不適合創建復雜的數據結構。如果你的數據結構并不是臨時使用,請使用類或者結構體而不是元組。請參考類和結構體。

可選類型

使用可選類型(optionals)來處理值可能缺失的情況。可選類型表示:有值或無值

下面的例子使用這種構造器來嘗試將一個 String 轉換成 Int:

let possibleNumber = "123"let convertedNumber = Int(possibleNumber)// convertedNumber 被推測為類型 "Int?", 或者類型 "optional Int"

因為該構造器可能會失敗,所以它返回一個可選類型(optional)Int,而不是一個 Int。一個可選的 Int 被寫作 Int? 而不是 Int。問號暗示包含的值是可選類型,也就是說可能包含 Int 值也可能不包含值。

nil

你可以給可選變量賦值為nil來表示它沒有值:

var serverResponseCode: Int? = 404// serverResponseCode 包含一個可選的 Int 值 404serverResponseCode = nil// serverResponseCode 現在不包含值

注意: nil不能用于非可選的常量和變量。如果你的代碼中有常量或者變量需要處理值缺失的情況,請把它們聲明成對應的可選類型。 如果你聲明一個可選常量或者變量但是沒有賦值,它們會自動被設置為 nil:

var surveyAnswer: String?// surveyAnswer 被自動設置為 nil

Swift 的 nil 和 Objective-C 中的 nil 并不一樣。在 Objective-C 中,nil 是一個指向不存在對象的指針。在 Swift 中,nil 不是指針——它是一個確定的值,用來表示值缺失。任何類型的可選狀態都可以被設置為 nil,不只是對象類型。

if 語句以及強制解析

你可以使用 if 語句和 nil 比較來判斷一個可選值是否包含值。你可以使用“相等”(==)或“不等”(!=)來執行比較。 如果可選類型有值,它將不等于 nil:

if convertedNumber != nil { print("convertedNumber contains some integer value.")}// 輸出 "convertedNumber contains some integer value."

當你確定可選類型確實包含值之后,你可以在可選的名字后面加一個感嘆號(!)來獲取值。這個驚嘆號表示“我知道這個可選有值,請使用它?!边@被稱為可選值的強制解析(forced unwrapping):

if convertedNumber != nil { print("convertedNumber has an integer value of /(convertedNumber!).")}// 輸出 "convertedNumber has an integer value of 123."

使用 ! 來獲取一個不存在的可選值會導致運行時錯誤。使用 ! 來強制解析值之前,一定要確定可選包含一個非 nil 的值。

可選綁定

使用可選綁定來判斷可選類型是否包含值,如果包含就把值賦給一個臨時常量或者變量。可選綁定可以用在 if 和 while 語句中,這條語句不僅可以用來判斷可選類型中是否有值,同時可以將可選類型中的值賦給一個常量或者變量。

if let actualNumber = Int(possibleNumber) { print("/'/(possibleNumber)/' has an integer value of /(actualNumber)")} else { print("/'/(possibleNumber)/' could not be converted to an integer")}// 輸出 "'123' has an integer value of 123"

如果轉換成功,actualNumber 常量可以在 if 語句的第一個分支中使用。

你可以包含多個可選綁定或多個布爾條件在一個 if 語句中,只要使用逗號分開就行。只要有任意一個可選綁定的值為nil,或者任意一個布爾條件為false,則整個if條件判斷為false。

if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 { print("/(firstNumber) < /(secondNumber) < 100")}// 輸出 "4 < 42 < 100"if let firstNumber = Int("4") { if let secondNumber = Int("42") { if firstNumber < secondNumber && secondNumber < 100 { print("/(firstNumber) < /(secondNumber) < 100") } }}// 輸出 "4 < 42 < 100"

在 if 條件語句中使用常量和變量來創建一個可選綁定,僅在 if 語句的句中(body)中才能獲取到值。相反,在 guard 語句中使用常量和變量來創建一個可選綁定,僅在 guard 語句外且在語句后才能獲取到值,請參考提前退出。

隱式解析可選類型

一個隱式解析可選類型其實就是一個普通的可選類型,但是可以被當做非可選類型來使用,并不需要每次都使用解析來獲取可選值。下面的例子展示了可選類型 String 和隱式解析可選類型 String 之間的區別:

let possibleString: String? = "An optional string."let forcedString: String = possibleString! // 需要感嘆號來獲取值let assumedString: String! = "An implicitly unwrapped optional string."let implicitString: String = assumedString // 不需要感嘆號

你可以把隱式解析可選類型當做一個可以自動解析的可選類型。

如果你在隱式解析可選類型沒有值的時候嘗試取值,會觸發運行時錯誤。和你在沒有值的普通可選類型后面加一個驚嘆號一樣。

你仍然可以把隱式解析可選類型當做普通可選類型來判斷它是否包含值:

if assumedString != nil { print(assumedString)}// 輸出 "An implicitly unwrapped optional string."

你也可以在可選綁定中使用隱式解析可選類型來檢查并解析它的值:

if let definiteString = assumedString { print(definiteString)}// 輸出 "An implicitly unwrapped optional string."

注意: 如果一個變量之后可能變成nil的話請不要使用隱式解析可選類型。如果你需要在變量的生命周期中判斷是否是nil的話,請使用普通可選類型。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久国产一级 | 免费a视频在线观看 | 中文字幕亚洲情99在线 | 黄色片网站免费 | 午夜视频在线观看免费视频 | av电影免费播放 | 欧美人与禽性xxxxx杂性 | 懂色粉嫩av久婷啪 | 免费中文视频 | 少妇一级淫片免费放正片 | 欧美一级黄色影院 | 亚洲一区二区中文字幕在线观看 | 精品久久中文字幕 | 亚洲成人综合网站 | 毛片毛片 | 美国一级黄色毛片 | 精品人伦一区二区三区蜜桃网站 | 欧美国产91| 九草在线视频 | 在线看一区二区三区 | 在线观看麻豆 | 日本爽快片100色毛片视频 | 国产精品剧情一区二区在线观看 | 午夜久久视频 | 中文字幕h | 日本在线观看中文字幕 | 337p粉嫩大胆噜噜噜亚瑟影院 | 免费毛片播放 | 欧美久久久一区二区三区 | 成熟女人特级毛片www免费 | 一级做受毛片免费大片 | 一级电影免费在线观看 | 国产一级毛片国语版 | 日日草视频| 日韩精品羞羞答答 | 欧美日韩手机在线观看 | 欧美aaaaa一级毛片在线 | 九九热免费观看 | 国产精品.com| 国产做爰全免费的视频黑人 | 欧美日韩在线播放 |