亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

2019-11-09 14:39:11
字體:
來源:轉載
供稿:網友

基礎語法

聲明常量和變量

常量聲明了就不可以改變 常量和變量必須在使用前聲明,用 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)來處理值可能缺失的情況??蛇x類型表示:有值或無值

下面的例子使用這種構造器來嘗試將一個 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的話,請使用普通可選類型。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲图片欧美午夜| 久久亚洲欧美日韩精品专区| 久久99精品国产99久久6尤物| 97久久精品人人澡人人爽缅北| 尤物tv国产一区| 欧美一级在线亚洲天堂| 亚洲一区二区三区乱码aⅴ| 久久久国产精品x99av| 亚洲人线精品午夜| 黑人巨大精品欧美一区二区三区| 26uuu另类亚洲欧美日本老年| 欧美激情欧美激情| 91精品久久久久久久久青青| 97视频在线观看网址| 国产日韩欧美影视| 欧美精品videosex极品1| 亚洲人精品午夜在线观看| 国产精品久久久久av免费| 国产欧美在线看| 欧美激情国内偷拍| 亚洲一区久久久| 欧美性猛交xxxx免费看久久久| 精品成人乱色一区二区| 中文字幕视频一区二区在线有码| 海角国产乱辈乱精品视频| 国产精品丝袜视频| 亚洲丝袜一区在线| 最新亚洲国产精品| 国产欧美va欧美va香蕉在| 亚洲人成在线电影| 中文字幕日本欧美| 欧美大全免费观看电视剧大泉洋| 精品亚洲国产视频| 91av视频在线| 亚洲成色777777女色窝| 久久视频中文字幕| 中文字幕亚洲欧美在线| 国产又爽又黄的激情精品视频| 日本精品久久电影| 亚洲色图第三页| 视频直播国产精品| 蜜臀久久99精品久久久无需会员| 成人黄色短视频在线观看| 亚洲小视频在线| 亚洲在线观看视频| 久久久精品影院| 在线视频日本亚洲性| 日韩精品视频免费专区在线播放| 亚洲欧美精品一区| 视频一区视频二区国产精品| 国产日本欧美一区二区三区| 97国产一区二区精品久久呦| 乱亲女秽乱长久久久| 欧美性xxxxxxx| 欧美精品videosex性欧美| 国产精品一区二区久久久久| 91精品久久久久久久久久久久久久| 国产精品视频精品| 国产精品美女无圣光视频| 亚洲九九九在线观看| 96精品久久久久中文字幕| 欧美亚洲国产成人精品| 国产丝袜高跟一区| zzjj国产精品一区二区| 午夜精品久久久久久99热| 国精产品一区一区三区有限在线| 亚洲人成自拍网站| 国产精品久久久久久久久久东京| 欧美精品videosex性欧美| 国产日韩欧美另类| 国产美女主播一区| 97香蕉久久超级碰碰高清版| 午夜精品久久久久久99热软件| 久久亚洲精品一区二区| 国产精品成av人在线视午夜片| 日韩一区二区三区国产| 欧美精品videos性欧美| 久久久精品久久久久| 91免费看片在线| 日韩色av导航| 久久精品国产清自在天天线| 欧美日韩人人澡狠狠躁视频| 久久av资源网站| 日韩电影大全免费观看2023年上| 日韩精品在线免费| 亚洲国产精品一区二区三区| 这里只有精品在线播放| 亚洲免费小视频| 色先锋资源久久综合5566| 日本欧美在线视频| 国产精品久久久久久久9999| 精品久久久久久国产91| 日韩成人av一区| 亚洲精品国精品久久99热一| 亚洲片av在线| 亚洲欧美日韩成人| 精品亚洲国产成av人片传媒| 国产午夜精品全部视频播放| 国产精品中文久久久久久久| 日韩精品极品视频| 国产美女久久精品香蕉69| 综合国产在线观看| 国产亚洲精品久久| 国产精品激情av在线播放| 国产亚洲精品激情久久| 欧美日韩国产综合新一区| 亚洲国产高清自拍| 日韩精品一二三四区| 亚洲国产免费av| 91色视频在线观看| 91在线免费看网站| 日韩电影中文字幕在线观看| 国产精品尤物福利片在线观看| 日韩美女av在线免费观看| 全球成人中文在线| 久久九九国产精品怡红院| 成人欧美在线观看| 黄网动漫久久久| 久久亚洲精品一区| 亚洲在线www| 91亚洲国产成人精品性色| www.亚洲天堂| 久久精品国产亚洲一区二区| 26uuu另类亚洲欧美日本一| 热久久这里只有精品| 97香蕉超级碰碰久久免费的优势| 成人字幕网zmw| 欧美激情视频免费观看| 亚洲韩国欧洲国产日产av| 久久久久亚洲精品国产| 中文综合在线观看| 中文字幕成人精品久久不卡| 国产成人精品电影久久久| 韩国精品美女www爽爽爽视频| 91中文在线视频| 久久久久久午夜| 亚洲精品国产电影| xvideos亚洲人网站| 日韩免费在线看| 亚洲欧美一区二区三区情侣bbw| 亚洲欧美制服丝袜| 国产一区二区黑人欧美xxxx| 国产精品久久一区主播| 最近2019中文字幕一页二页| 国产精品扒开腿做爽爽爽男男| 国产精品一区二区三区久久久| 91在线免费观看网站| 国产精品视频午夜| 成人网在线观看| 欧美激情中文网| 久久久久在线观看| 国内成人精品一区| 久久亚洲电影天堂| 国产精品一二三在线| 日韩精品在线视频美女| 亚洲免费影视第一页| 国产精品男女猛烈高潮激情| 亚洲国产精品专区久久| 亚洲综合第一页| 国产精品吊钟奶在线| 亚洲欧洲在线观看| 欧美黑人xxxⅹ高潮交| 国产97在线|日韩| 欧洲美女7788成人免费视频|