更多教程,請關注微信號:roclel
本次的教程是基于Swift5.1版本
Swift是一個全新的用戶iOS,MacOS,watchOS和tvOS的應用編程語言。如果你有C和Objective-C開發經驗的話,Swift的許多部門會讓你很熟悉。
Swift 為所有 C 和 Objective-C 的類型提供了自己的版本,包括整型值的 Int ,浮點數值的 Double 和 Float ,布爾量值的 Bool ,字符串值的 String 。如同集合類型中描述的那樣, Swift 同樣也為三個主要的集合類型提供了更高效的版本, Array , Set 和 Dictionary 。
除了我們熟悉的類型之外,Swift還增加了Objective-C 中沒有的類型,元組。元組允許你創建和傳遞一組的數據,你可以用元組當做函數的返回值來返回多個的值
Swift還增加了可選項,用來處理沒有值的情況,它使得Swift更安全,這也充分說明swift是一門類型安全的編程語言,那么現在讓我們開始swift的編程之旅吧
常量和變量
顧名思義,常量的值一旦設置好便不能再被更改,然而變量的值可以在將來被設置成不同的值
聲明常量和變量
常量和變量必須在使用前被申明,使用關鍵字 let 來聲明常量,使用關鍵字 var 來聲明變量。下面是聲明的一個例子
let heigh = 10 //聲明一個常量 不能被修改,否則會編譯錯誤
var weight = 10 //聲明一個變量 后期可以修改
類型標注
你可以在聲明一個常量或者變量的時候提供類型標注,用來確認常量或者變量能夠存儲值的類型。添加類型標注的方式是在常量或者變量的后面加一個冒號,然后加上一個空格,最后加上要使用的類型的名稱。下面舉個例子:
var name: String = "dapeng" //聲明一個String類型的變量name
輸出常量和變量
你可以使用 print(_:separator:terminator:) 函數來打印當前常量和變量中的值。
var name: String = "dapeng"
print(name)
//輸出 dapeng
Swift 使用字符串插值 的方式來把常量名或者變量名當做占位符加入到更長的字符串中,然后讓 Swift 用常量或變量的當前值替換這些占位符。將常量或變量名放入圓括號中并在括號前使用反斜杠將其轉義:
var name: String = "dapeng"
print("\(name) is very good")
//輸出 dapeng is very good
注釋
使用注釋來將不需要執行的文本放入的代碼當中,作為標記或者你自己的提醒。當 Swift 編譯器在編譯代碼的時候會忽略掉你的注釋。swift的注釋和c的注釋基本相同,下面是例子
1.單行注釋
// 這是一個注釋
2.多行注釋
/* this is also a comment,
but written over multiple lines */
分號
和許多其他的語言不同,Swift 并不要求你在每一句代碼結尾寫分號( ; ),當然如果你想寫的話也沒問題。總之,如果你想在一行里寫多句代碼,分號還是需要的
let cat = "mao"
var dog = "dog"
var people = "people";var student = "student"
類型安全和類型推斷
Swift 是一門類型安全的語言。類型安全的語言可以讓你清楚地知道代碼可以處理的值的類型。如果你的一部分代碼期望獲得 String ,你就不能錯誤的傳給它一個 Int 。
舉個例子,如果你給一個新的常量設定一個 42 的字面量,而且沒有說它的類型是什么,Swift 會推斷這個常量的類型是 Int ,因為你給這個常量初始化為一個看起來像是一個整數的數字
let meaningOfLife = 42
// meaningOfLife is inferred to be of type Int
因為 Swift 是類型安全的,他在編譯代碼的時候會進行類型檢查,任何不匹配的類型都會被標記為錯誤。這會幫助你在開發階段更早的發現并修復錯誤。
數值型字面量
整數型字面量可以寫作:
- 一個十進制數,沒有前綴
- 一個二進制數,前綴是 0b
- 一個八進制數,前綴是 0o
- 一個十六進制數,前綴是 0x
類型別名
類型別名可以為已經存在的類型定義了一個新的可選名字。用 typealias 關鍵字定義類型別名。
typealias mInt = Int
var age:mInt = 10
var age:Int = 10
//以上兩種age的聲明是等同的
元組
元組把多個值合并成單一的復合型的值。元組內的值可以是任何類型,而且可以不必是同一類型。
在下面的示例中, (404, “Not Found”) 是一個描述了 HTTP 狀態代碼 的元組。HTTP 狀態代碼是當你請求網頁的時候 web 服務器返回的一個特殊值。當你請求不存在的網頁時,就會返回 404 Not Found
let http404Error = (404, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")
(404, “Not Found”) 元組把一個 Int 和一個 String 組合起來表示 HTTP 狀態代碼的兩種不同的值:數字和人類可讀的描述。他可以被描述為“一個類型為 (Int, String) 的元組”
任何類型的排列都可以被用來創建一個元組,他可以包含任意多的類型。例如 (Int, Int, Int) 或者 (String, Bool) ,實際上,任何類型的組合都是可以的。
你也可以將一個元組的內容分解成單獨的常量或變量,這樣你就可以正常的使用它們了:
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// prints "The status code is 404"
print("The status message is \(statusMessage)")
// prints "The status message is Not Found"
當你分解元組的時候,如果只需要使用其中的一部分數據,不需要的數據可以用下滑線( _ )代替:
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// prints "The status code is 404"
另外一種方法就是利用從零開始的索引數字訪問元組中的單獨元素:
print("The status code is \(http404Error.0)")
// prints "The status code is 404"
print("The status message is \(http404Error.1)")
// prints "The status message is Not Found"
你可以在定義元組的時候給其中的單個元素命名:
let http200Status = (statusCode: 200, description: "OK")
在命名之后,你就可以通過訪問名字來獲取元素的值了:
print("The status code is \(http200Status.statusCode)")
// prints "The status code is 200"
print("The status message is \(http200Status.description)")
// prints "The status message is OK"
作為函數返回值時,元組非常有用。一個用來獲取網頁的函數可能會返回一個 (Int, String) 元組來描述是否獲取成功。相比只能返回一個類型的值,元組能包含兩個不同類型值,他可以讓函數的返回信息更有用。
可選項
可以利用可選項來處理值可能缺失的情況。可選項意味著:這里有一個值,它等于X或者這里根本沒有值
首先明確的一個概念
- Objective-C中的nil:表示缺少一個合法的對象,是指向不存在對象的指針,對結構體、枚舉等類型不起作用(會返回NSNotFound)
- Swift中的nil:表示任意類型的值缺失,是一個確定的值,要么是該類型的一個值要么什么都沒有(即為nil)
在Swift中Optional(可選類型)是一個含有兩種情況的枚舉,None 和 Some(T),用來表示可能有或可能沒有值。任何類型都可以明確聲明為(或者隱式轉換)可選類型。當聲明一個可選類型的時候,要確保用括號給 ? 操作符一個合適的范圍。
- 可選類型的聲明
var optionalStr: String? = "swift語言可選類型"http://聲明可選類型字符串,并賦初值
var opStu:Student? //聲明可選opStu對象,賦初值nil
注意:在類型和 ?之間沒有空格
- 強制解析
當你確定自定義的可選類型一定有值時,可以使用操作符(!)進行強制解析,拿到數據,嘆號表示”我知道一定有值,請使用它”,但是當你判斷錯誤,可選值為nil時使用(!)進行強制解析,會有運行錯誤。
var myValue:String? = nil
myValue="強制解析,一定有值"
if myValue != nil {
print(myValue!)//使用!進行強制解析
}else{
print("字符串為nil")
}
可選項綁定
使用可選綁定,擺脫了頻繁的判斷是否為nil在賦值,但是使用可選綁定(optional binding)來判斷可選類型是否包含值,如果包含就把值賦給一個臨時常量或者變量。可選綁定可以用在if和while語句中來對可選類型的值進行判斷并把值賦給一個常量或者變量。格式
if let tempStr = someOptional{
tempStr//如果someOptiona有值的話,就會賦值給tempStr,然后使用
}
var myStr:String?
myStr="可選綁定的值"
if let tempStr = myStr { //如果希望修改tempStr的值,可以定義成var
print(tempStr)
}else{
print("字符串為nil")
}
- 隱式展開可選項
在最初的聲明時使用?修飾,當你希望它自動解析是可以用!代替?來修飾,這樣在變量使用時就不需要加!來強制拆包,它會自動解析
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation mark
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation mark
print(implicitString)
備注:教程中有關Int Double Float Bool 類型沒有做詳細的介紹,需要了解的小伙伴可以訪問蘋果開發文檔中心查看相關的文檔