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

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

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)來處理值可能缺失的情況??蛇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 的值。

可選綁定

使用可選綁定來判斷可選類型是否包含值,如果包含就把值賦給一個臨時常量或者變量??蛇x綁定可以用在 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
国产精品久久久久久超碰| 色视频www在线播放国产成人| 亚洲成人激情在线| 久久全国免费视频| 亚洲欧美综合v| 久久久久久有精品国产| 久久精品久久精品亚洲人| 国产精品久久久久久久久久免费| 欧美日韩综合视频| 久久深夜福利免费观看| 97在线看免费观看视频在线观看| 欧美激情视频一区| 国产精品美女999| 欧美在线视频一二三| 91免费版网站入口| 欧美成人一二三| 日韩中文字幕免费| 欧美成人免费va影院高清| 亚洲欧洲av一区二区| 国外成人在线播放| 亚洲最大的免费| 久久亚洲精品中文字幕冲田杏梨| 亚洲高清一二三区| 欧美成人第一页| 一区二区三区四区精品| 国产精品无码专区在线观看| 一区二区三区美女xx视频| 国产日韩在线播放| 精品一区二区三区三区| 日韩在线不卡视频| 久久久免费精品| 亚洲欧美日韩在线一区| 欧美日韩午夜剧场| 欧美精品精品精品精品免费| 亚洲一区av在线播放| 欧美性生交大片免费| 日韩欧美在线播放| 91精品久久久久| 日韩中文字幕精品视频| 久久久在线视频| 中文字幕久久久av一区| 中文字幕最新精品| 亚洲午夜性刺激影院| 亚洲自拍偷拍在线| 久久久免费电影| 久久夜色撩人精品| 亚洲在线免费观看| 亚洲香蕉在线观看| 91成品人片a无限观看| 欧美日韩在线视频一区| 奇米4444一区二区三区| 亚洲成色777777女色窝| 美女啪啪无遮挡免费久久网站| 亚洲精品99999| 国产精品女主播| 日韩电影网在线| 久久亚洲综合国产精品99麻豆精品福利| 在线播放亚洲激情| 成人av资源在线播放| 午夜精品久久久久久久男人的天堂| 亚洲丁香久久久| 欧美肥老太性生活视频| 亚洲人成网站色ww在线| 久久伊人91精品综合网站| 高清亚洲成在人网站天堂| 精品久久久久久久久久久久久| 91精品国产九九九久久久亚洲| 岛国av一区二区| 成人欧美一区二区三区在线| 欧美性理论片在线观看片免费| 91精品国产乱码久久久久久久久| 国产午夜精品久久久| 国产欧美日韩综合精品| 亚洲成人久久久| 亚洲人成77777在线观看网| 亚洲福利影片在线| 欧美日韩成人精品| 国产日韩在线视频| 欧美麻豆久久久久久中文| 国产精品久久久久久搜索| 国产999在线| 欧美午夜精品久久久久久浪潮| 亚洲精品日韩丝袜精品| 国产噜噜噜噜久久久久久久久| 日韩精品福利在线| 91高潮在线观看| 欧美中文在线字幕| 日韩国产在线看| 国产精品成人av在线| 国产精品久久久久久久久久久新郎| 日韩中文字幕国产精品| 国产亚洲欧美日韩美女| 国产精品无码专区在线观看| 久久视频在线观看免费| 亚洲欧美日韩第一区| 色综合久久88色综合天天看泰| 国产69精品久久久久9999| 91美女福利视频高清| 国内精品小视频在线观看| 国产亚洲欧洲黄色| 国产婷婷成人久久av免费高清| 日韩视频免费在线观看| 亚洲97在线观看| 国产亚洲一级高清| 亚洲精品国产suv| 91国在线精品国内播放| 国产精品久久久久久网站| 欧美国产亚洲精品久久久8v| 国产免费久久av| 亚洲成人久久久| 日韩高清免费在线| 一区国产精品视频| 中文字幕日韩欧美精品在线观看| 国产97色在线|日韩| 中文字幕在线看视频国产欧美在线看完整| 国产成人精品视| 久久精品这里热有精品| 欧美疯狂性受xxxxx另类| 日韩中文字幕不卡视频| 欧美成人在线免费| 亚洲精品久久在线| 国产成人精品久久久| 色噜噜亚洲精品中文字幕| 国产欧洲精品视频| 国产精品成人观看视频国产奇米| 7m精品福利视频导航| 久久精品视频网站| 91av在线播放| 91精品国产网站| 国产美女久久精品香蕉69| 国产精品久久久久久久电影| 午夜精品久久久久久久99黑人| 国产亚洲a∨片在线观看| 97久久超碰福利国产精品…| 日韩av中文在线| 少妇高潮久久久久久潘金莲| 国产成人激情小视频| 最近2019年手机中文字幕| 久久精品91久久香蕉加勒比| 最近2019免费中文字幕视频三| 精品中文字幕乱| 国产精品久久久久久av下载红粉| 久久久久久亚洲精品中文字幕| 亚洲最新av网址| 91av中文字幕| 一区二区三区黄色| 超碰精品一区二区三区乱码| 精品国产一区二区在线| 亚洲国产中文字幕在线观看| 亚洲国产美女久久久久| 亚洲综合在线小说| 国语自产精品视频在线看| 日韩欧美福利视频| 亚洲综合中文字幕68页| 午夜精品久久久久久99热软件| 亚洲一区二区三区乱码aⅴ蜜桃女| 日韩欧美视频一区二区三区| 欧美另类69精品久久久久9999| 国产精品99久久久久久白浆小说| 欧美韩国理论所午夜片917电影| 欧美黑人性生活视频| 一本大道久久加勒比香蕉| 久久久久久国产三级电影| 97**国产露脸精品国产|