Swift學習筆記(一)——Swift的資料型別
阿新 • • 發佈:2019-01-26
Swift的資料型別
Swift 的型別是在 C 和 Objective-C 的基礎上提出的,Int是整型;Double和Float是浮點型;Bool是布林型;String是字串。Swift 還有兩個有⽤用的集合型別, Array和Dictionary,
除了我們熟悉的型別,Swift 還增加了 Objective-C 中沒有的型別比如元組(Tuple)。元組可以讓你建立或者傳遞一組資料,比如作為函式的返回值時,你可以用一個元組可以返回多個值。
Swift 還增加了可選(Optional)型別,用於處理值缺失的情況。可選表示“那兒有一個值,並且它等於 x ”或者“那兒沒有值”。可選有點像在Objective-C 中使用 nil,但是它可以用在任何型別上,不僅僅是類。可選型別比 Objective-C 中的 nil指標更加安全也更具表現力,它是 Swift 許多強大特性的重要組成部分。
Swift用字串插值(string interpolation)的方式把常量名或者變數名當
做佔位符加入到⻓長字串中,Swift會⽤用當前常量或變數的值替換這些佔位
符。將常量或變數名放⼊入反斜槓符加一對圓括號中 "\()":
整數邊界
使用min或max值來獲取該型別的最大最小值,如:
let minValue = UInt8.min // minValue is equal to 0, and
is of type UInt8 let maxValue = UInt8.max // maxValue is
equal to 255, and is of type UInt8 這些值邊界值區分了整數
的型別(⽐比如 UInt8),所以可以像該型別的其他值⼀一樣被⽤用在表示式中⽽而不
⽤用考慮益處的問題。
類型別名為現有型別定義的替代名稱。您可以使用typealias關鍵字定義類型別名。當你使用的型別名稱更符合上下文時,可以定義如:typealias AudioSample = UInt16
元組型別
元組型別可以將一些不同的資料型別組裝成一個元素,這個元素可以用來作為函式的返回值返回包含多種資料型別的值。例:let http404Error = (404, "Not Found")
可選型別
在一個值可能不存在的時候,可以使用可選型別。這種型別的定
義是:要麼存在這個值,且等於x,要麼在這個值不存在。
使用斷言除錯
斷言是一種實時檢測條件是否為true的方法。如果這個條件為false,那麼程式碼將會中斷執行。
基本預算符
1、b為負值時的b的符號被忽略,這意味著%b和%-b的結果是
一樣的。
println("-9 除 4 取餘:\(-9%4)"); - -9 除 4 取餘:-1
println("-9 除 -4 取餘:\(-9%(-4))"); -> -9 除 -4 取餘:-1
不同於C和Objective-C,Swift的餘數運算子也能運用於浮點數:
2、封閉範圍運算子
封閉範圍運算子(a…b)定義了一個範圍,從a到b,幷包括a和b的
值。
3、半封閉的區域運算子
半封閉的區域運算子(a..b)定義了從a到b的範圍,但不包括b。
4、字串通過isEmpty屬性可以檢查一個字串是否為空
5、陣列
a)通過只讀屬性count來讀取陣列的長度;
b)通過一個返回布林型別的isEmpty屬性檢查陣列的長度是否為0
c)在陣列末尾增加一個元素可以通過append方法
d)甚至,還可以用(+=)操作符來把一個元素新增到陣列末尾
e)你也可以用(+=)操作符來把一個數組新增到另一個數組的末尾
f)你可以使用下標語法一次性改變一系列的值,儘管修改的區域遠遠大於要修改的值。在下面的雷子中, 替換掉
“Chocolate Spread”, “Cheese”,”Butter”,”Bananas”,”Apples”:
shoppingList[4...6] = ["Bananas", "Apples"] // shoppingList 現在包含6個元素
g)在一個特定的索引位置插入一個值,可以使用insert(atIndex:)方法shoppingList.insert("Maple Syrup", atIndex: 0)
h)你可以呼叫removeAtIndex方法移除特定的元素。這個方法移除特定索引位置的元素,已經返回這個被移除的元素(儘管你並不關心這個返回值)。
i)如果你從陣列中移除最後一個元素,使用removeLast方法
j)遍歷陣列
i.可以使用for-in迴圈來遍歷陣列中的值
ii.使用enumerate函式代替會更方便,enumerate函式對於每一個元素都會返回一個包含元素的索引和值的元組(tuple)。
例:for (index, value) in enumerate(shoppingList)
k)你可以通過這個初始化方法增加一個新的陣列,元素的數量成為count,合適的預設值為repeatedValue 例var threeDoubles = Double[](count: 3, repeatedValue: 0.0)
6、字典
a)
i.updateValue(forKey:) 方法去設定或者更新一個特定鍵的值、
ii.updateValue(forKey:) 方法如果鍵不存在則會設定它的值,如果鍵存在則會更新它的值, 和下標不一樣是,
iii.updateValue(forKey:) 方法 如果更新時,會返回原來舊的值
a)removeValueForKey方法,這個方法如果存在鍵所對應的值,則移除一個鍵值對,並返回被移除的值,否則返回nil
b)字典中的每一個元素都會返回一個元祖(tuple),你可以在迴圈部分分解這個元祖,並用臨時變數或者常量來儲存它。
例子:for (airportCode, airportName) in airports { println("\(airportCode): \(airportName)") }
注意Swift中的字典型別是非序列化集合
7、Where關鍵詞
switch語句可以使用where關鍵詞來增加判斷的條件,在下面的例子中:
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint
{
case let (x, y) where x == y:
println("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
println("(\(x), \(y)) is on the line x == -y")
case let (x, y):
println("(\(x), \(y)) is just some arbitrary point")
}
每個case都因為有where而不同,第一個case就是判斷x是
否與y相等,表示點在斜線y=x上。
8、控制跳轉語句
在Swift中控制跳轉語句有4種,讓程式設計人員更好地控制程式碼的流轉,包括:
continue
break
fallthroughreturn
return
fallthrough
由於Swift中的switch語句不會自動的因為沒有break而跳轉
到下一個case,因此如果需要想C語言中那樣,依次執行每個
case的時候,就需要用到fallthrough關鍵詞。
Swift 的型別是在 C 和 Objective-C 的基礎上提出的,Int是整型;Double和Float是浮點型;Bool是布林型;String是字串。Swift 還有兩個有⽤用的集合型別, Array和Dictionary,
除了我們熟悉的型別,Swift 還增加了 Objective-C 中沒有的型別比如元組(Tuple)。元組可以讓你建立或者傳遞一組資料,比如作為函式的返回值時,你可以用一個元組可以返回多個值。
Swift 還增加了可選(Optional)型別,用於處理值缺失的情況。可選表示“那兒有一個值,並且它等於 x ”或者“那兒沒有值”。可選有點像在Objective-C 中使用 nil,但是它可以用在任何型別上,不僅僅是類。可選型別比 Objective-C 中的 nil指標更加安全也更具表現力,它是 Swift 許多強大特性的重要組成部分。
Swift用字串插值(string interpolation)的方式把常量名或者變數名當
做佔位符加入到⻓長字串中,Swift會⽤用當前常量或變數的值替換這些佔位
符。將常量或變數名放⼊入反斜槓符加一對圓括號中 "\()":
整數邊界
使用min或max值來獲取該型別的最大最小值,如:
let minValue = UInt8.min // minValue is equal to 0, and
is of type UInt8 let maxValue = UInt8.max // maxValue is
equal to 255, and is of type UInt8 這些值邊界值區分了整數
的型別(⽐比如 UInt8),所以可以像該型別的其他值⼀一樣被⽤用在表示式中⽽而不
⽤用考慮益處的問題。
類型別名為現有型別定義的替代名稱。您可以使用typealias關鍵字定義類型別名。當你使用的型別名稱更符合上下文時,可以定義如:typealias AudioSample = UInt16
元組型別
元組型別可以將一些不同的資料型別組裝成一個元素,這個元素可以用來作為函式的返回值返回包含多種資料型別的值。例:let http404Error = (404, "Not Found")
可選型別
在一個值可能不存在的時候,可以使用可選型別。這種型別的定
義是:要麼存在這個值,且等於x,要麼在這個值不存在。
使用斷言除錯
斷言是一種實時檢測條件是否為true的方法。如果這個條件為false,那麼程式碼將會中斷執行。
基本預算符
1、b為負值時的b的符號被忽略,這意味著%b和%-b的結果是
一樣的。
println("-9 除 4 取餘:\(-9%4)"); - -9 除 4 取餘:-1
println("-9 除 -4 取餘:\(-9%(-4))"); -> -9 除 -4 取餘:-1
不同於C和Objective-C,Swift的餘數運算子也能運用於浮點數:
2、封閉範圍運算子
封閉範圍運算子(a…b)定義了一個範圍,從a到b,幷包括a和b的
值。
3、半封閉的區域運算子
半封閉的區域運算子(a..b)定義了從a到b的範圍,但不包括b。
4、字串通過isEmpty屬性可以檢查一個字串是否為空
5、陣列
a)通過只讀屬性count來讀取陣列的長度;
b)通過一個返回布林型別的isEmpty屬性檢查陣列的長度是否為0
c)在陣列末尾增加一個元素可以通過append方法
d)甚至,還可以用(+=)操作符來把一個元素新增到陣列末尾
e)你也可以用(+=)操作符來把一個數組新增到另一個數組的末尾
f)你可以使用下標語法一次性改變一系列的值,儘管修改的區域遠遠大於要修改的值。在下面的雷子中, 替換掉
“Chocolate Spread”, “Cheese”,”Butter”,”Bananas”,”Apples”:
shoppingList[4...6] = ["Bananas", "Apples"] // shoppingList 現在包含6個元素
g)在一個特定的索引位置插入一個值,可以使用insert(atIndex:)方法shoppingList.insert("Maple Syrup", atIndex: 0)
h)你可以呼叫removeAtIndex方法移除特定的元素。這個方法移除特定索引位置的元素,已經返回這個被移除的元素(儘管你並不關心這個返回值)。
i)如果你從陣列中移除最後一個元素,使用removeLast方法
j)遍歷陣列
i.可以使用for-in迴圈來遍歷陣列中的值
ii.使用enumerate函式代替會更方便,enumerate函式對於每一個元素都會返回一個包含元素的索引和值的元組(tuple)。
例:for (index, value) in enumerate(shoppingList)
k)你可以通過這個初始化方法增加一個新的陣列,元素的數量成為count,合適的預設值為repeatedValue 例var threeDoubles = Double[](count: 3, repeatedValue: 0.0)
6、字典
a)
i.updateValue(forKey:) 方法去設定或者更新一個特定鍵的值、
ii.updateValue(forKey:) 方法如果鍵不存在則會設定它的值,如果鍵存在則會更新它的值, 和下標不一樣是,
iii.updateValue(forKey:) 方法 如果更新時,會返回原來舊的值
a)removeValueForKey方法,這個方法如果存在鍵所對應的值,則移除一個鍵值對,並返回被移除的值,否則返回nil
b)字典中的每一個元素都會返回一個元祖(tuple),你可以在迴圈部分分解這個元祖,並用臨時變數或者常量來儲存它。
例子:for (airportCode, airportName) in airports { println("\(airportCode): \(airportName)") }
注意Swift中的字典型別是非序列化集合
7、Where關鍵詞
switch語句可以使用where關鍵詞來增加判斷的條件,在下面的例子中:
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint
{
case let (x, y) where x == y:
println("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
println("(\(x), \(y)) is on the line x == -y")
case let (x, y):
println("(\(x), \(y)) is just some arbitrary point")
}
每個case都因為有where而不同,第一個case就是判斷x是
否與y相等,表示點在斜線y=x上。
8、控制跳轉語句
在Swift中控制跳轉語句有4種,讓程式設計人員更好地控制程式碼的流轉,包括:
continue
break
fallthroughreturn
return
fallthrough
由於Swift中的switch語句不會自動的因為沒有break而跳轉
到下一個case,因此如果需要想C語言中那樣,依次執行每個
case的時候,就需要用到fallthrough關鍵詞。