Swift5.4教程(一)--常量和變數
本次的教程是基於Swift5.4版本
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語言可選型別"//宣告可選型別字串,並賦初值
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 型別沒有做詳細的介紹,需要了解的小夥伴可以訪問蘋果開發文件中心檢視相關的文件