標籤:資料結構 方式 tor 卡布奇諾 his rect ase mic 運算
Swift 是一種適用於 iOS 和 OS X 應用的全新程式設計語言,它建立在最好的 C 和 Objective-C 語言之上,並且沒有 C 語言的相容性限制。Swift 採用安全的編程模式,增加了現代功能使 編程更容易、更靈活、更有趣。Swift 以成熟且備受寵愛的 Cocoa 和 Cocoa Touch 架構為 支撐,這是一個重新構想軟體開發的機會。
——
我的第一行Swift代碼
import Foundation //表示引入Foundation架構
var str = "Hello World" //聲明str變數,var表示聲明變數
print(str) //print(_:)是一個函數,能夠將變數或常量輸出到控制台
——
使用Web網站編寫Swift代碼
Swift程式不能在Windows其他平台編譯和運行,有人提供了一個網站swiftstub.com,可以在任何平台下編譯和運行Swift程式。
——Swift 2.0
之後增加的關鍵字
在Swift 2.0之後增加defer、guard、repeat、catch、rethrows、throw、throws和try關鍵字,其中repeat關鍵字替代do - while迴圈中的do,即中repeat - while迴圈。而do關鍵字用於錯誤處理。catch、rethrows、throw、throws和try是錯誤處理關鍵字。 錯誤處理是Swift 2.0之後增加新內容。
——
用Playground工具編寫Swift
用Playground編寫Swift代碼目的是為了學習、測試演算法、驗證想法和可視化看到運行結果,不是為了使最終的程式編譯和發布。
Playground程式運行 ①地區是代碼編寫視圖;②地區是運行結果檢視;③地區是時間軸視圖;④地區是控制台視圖,使用print等日誌函數將結果輸出到控制台,可以通過左下角的 按鈕隱藏和顯示控制台。
——Swift
標識符和關鍵字
標識符就是給變數、常量、方法、函數、枚舉、結構體、類、協議等由開發人員指定的名字。
Swift中命名規則:
·區分大小寫,Myname與myname是兩個不同的標識符;
·標識符首字元可以以底線(_)或者字母開始,但不能是數字;
·標識符中其他字元可以是底線(_)、字母或數字。
Swift語言常見的關鍵字有以下4種
·與聲明有關的關鍵字:class、deinit、enum等。
·與語句有關的關鍵字:break、case、continue等。
·運算式和類型關鍵字:as、catch、dynamicType、false等。
·在特定上下文中使用的關鍵字:associativity、convenience、dynamic等。
注意:Swift中關鍵字是區分大小寫,所以class和Class是不同的,那麼Class不是Swift的關鍵字。
——
常量和變數
在Swift中,用let聲明一個常量;用var來聲明一個變數
我覺得:原則上優先使用let,它有很多好處,可以防止程式運行過程中不必要的修改、提高程式的可讀性。特別是引用資料類型聲明時候經常採用let聲明,雖然在業務層面上並不是一個常量,而是防止程式運行過程中錯誤地修改它引用。
——Swift 2.0
中的print函數4種重載形式
print(_:)。輸出變數或常量到控制台,並且換行。
print(_:_:)。輸出變數或常量到指定類型的流中,並且換行。
print(_:appendNewline:)。輸出變數或常量到控制台,appendNewline參數是布爾值,true表示換行,false表示不換行。
print(_:_:appendNewline:)。輸出變數或常量指定類型的流中,appendNewline參數是布爾值,true表示換行,false表示不換行。
——
在Swift中,運算式有3種形式
1、不指定資料類型 vara1 = 10
2、指定資料類型 vara1:Int = 10
3、使用分號 vara1:Int = 10; var a2:Int = 20
在Swift語言中,一條語句結束後可以不加分號也可以添加分號,但是有一種情況必須要用分號,那就是多條語句寫在一行的時候,需要通過分號來區別語句。
例如: var a1:Int = 10; var a2:Int =20;
——Swift
的運算子
在Swift語言中主要的運算子包括算術、關係、邏輯、位元運算符等
一元運算子:
- 取反符號 取反運算
++ 自加一 先取值再加一,或先加一再取值
-- 自減一 先取值再減一,或先減一再取值
二元運算子:
+ 加 求和,還可用String類型,進行字串串連操作
- 減 求差
* 乘 求積
/ 除 求商
% 取餘 求餘數
幾個特殊運算子:
? 引用號(.):執行個體調用屬性、方法等操作符。
? 問號(?):用來聲明可選類型。
? 驚嘆號(!):對可選類型值進行強制拆封。
? 箭頭(->):說明函數或方法傳回值類型。
? 冒號運算子(:):用於字典集合分割“索引值”對。
——Swift
中資料類型
整型、浮點型、布爾型、字元、字串這些類型是一定有的,其中集合、枚舉、結構體、類也是Swift中的資料類型。元組是Swift中特有的。
元組是一種資料結構,在數學中應用廣泛。在電腦科學中,元組是關聯式資料庫中的基本概念,元組表中的一條記錄,每列就是一個欄位。因此在二維表裡,元組也稱為記錄。
現在使用Swift文法表示Student元組就是:
第一種寫法
("1001", "張三", 30, 90)
第二種寫法
(id:"1001", name:"張三", english_score:30, chinese_score:90)
——
資料類型之整型和浮點型
Swift提供8、16、32、64位形式的有符號及不帶正負號的整數。這些整數類型遵循C語言的命名規約,我歸納了Swift中的整型:
整型樣本:
print("UInt8 range: \(UInt8.min) ~ \(UInt8.max)")
print("Int8 range: \(Int8.min) ~ \(Int8.max)")
print("UInt range: \(UInt.min) ~ \(UInt.max)")
print("UInt64 range: \(UInt64.min) ~ \(UInt64.max)")
print("Int64 range: \(Int64.min) ~ \(Int64.max)")
print("Int range: \(Int.min) ~ \(Int.max)")
輸出結果如下:
UInt8 range: 0 ~ 255
Int8 range: -128 ~ 127
UInt range: 0 ~ 18446744073709551615
UInt64 range: 0 ~ 18446744073709551615
Int64 range: -9223372036854775808 ~ 9223372036854775807
Int range: -9223372036854775808 ~ 9223372036854775807
上述代碼是通過整數的min和max屬性計算各個類型的範圍。
浮點型主要用來儲存小數數值,也可以用來儲存範圍較大的整數。它分為浮點數(float)和雙精確度浮點數(double)兩種,雙精確度浮點數所使用的記憶體空間比浮點數多,可表示的數值範圍與精確度也比較大。
——字串的插入、刪除和替換
splice(_:atIndex:)。在索引位置插入字串。
insert(_:atIndex:)。在索引位置插入字元。
removeAtIndex(_:)。在索引位置刪除字元。
removeRange(_:)。刪除指定範圍內的字串。
replaceRange(_:, with: String) 。使用字串或字元替換指定範圍內的字串。
代碼:
var str = "Swift"
print("原始字串:\(str)")
str.splice("Objective-C and ".characters, atIndex:str.startIndex)
print("插入字串後:\(str)")
str.insert(".", atIndex: str.endIndex)
print("插入.字元後:\(str)")
str.removeAtIndex(str.endIndex.predecessor())
print("刪除.字元後:\(str)")
var startIndex = str.startIndex
var endIndex = advance(startIndex, 9)
var range = startIndex...endIndex
str.removeRange(range)
print("刪除範圍後:\(str)")
startIndex = str.startIndex
endIndex = advance(startIndex, 0)
range = startIndex...endIndex
str.replaceRange(range, with: "C++")
print("替換範圍後:\(str)")
輸出結果:
原始字串:Swift
插入字串後:Objective-C and Swift
插入.字元後:Objective-C and Swift.
刪除.字元後:Objective-C and Swift
刪除範圍後:C and Swift
替換範圍後:C++ and Swift
——
請注意數字類型之間的轉換
在C、Objective-C和Java等其他語言中,整型之間有兩種轉換方法:
1、 從小範圍數到大範圍數轉換是自動的;
2、 從大範圍數到小範圍數需要強制類型轉換,有可能造成資料精度的丟失。
而在Swift中這兩種方法是行不通的,需要通過一些函數進行顯式地轉換,代碼如下:
let historyScore:UInt8 = 90
let englishScore:UInt16 = 130
let totalScore = historyScore + englishScore //錯誤
程式就會有編譯錯誤,原因是historyScore是UInt8類型,而englishScore是UInt16類型,它們之間不能轉換。
兩種轉換方法:
· 一種是把UInt8的historyScore轉換為UInt16類型。由於是從小範圍數轉換為大範圍數,這種轉換是安全的。
代碼: let totalScore = UInt16(historyScore) + englishScore //是正確的轉換方法。
·另外一種是把UInt16的englishScore轉換為UInt8類型。由於是從大範圍數轉換為小範圍數,這種轉換是不安全的,如果轉換的數比較大可能會造成精度的丟失。
代碼:let totalScore = historyScore + UInt8(englishScore) //是正確的轉換方法。
整型與浮點型之間的轉換與整型之間的轉換類似:
let historyScore:Float = 90.6
let englishScore:UInt16 = 130
let totalScore = historyScore + englishScore //錯誤
let totalScore = historyScore + Float(englishScore) //正確,安全
let totalScore = UInt16(historyScore) + englishScore //正確,小數被截掉
——
字典集合
Swift字典表示一種非常複雜的集合,允許按照某個鍵來訪問元素。字典是由兩部分集合構成的,一個是鍵(key)集合,一個是值(value)集合。鍵集合是不能有重複元素的,而值集合是可以重複的,鍵和值是成對出現的。
字典聲明與初始化
Swift字典類型是Dictionary,也是一個泛型集合。
在聲明一個Dictionary類型的時候可以使用下面的語句之一。
var studentDictionary1: Dictionary<Int,
String>
var studentDictionary2: [Int:
String]
聲明的字典需要進行初始化才能使用,字典類型往往是在聲明的同時進行初始化的。
var studentDictionary1: Dictionary<Int, String>
= [
102 :
"張三",
105 :
"李四",
109 :
"王五"]
var studentDictionary2 = [
102 :
"張三",
105 :
"李四",
109 :
"王五"]
let studentDictionary3 = [
102 :
"張三",
105 :
"李四",
109 :
"王五"]
字典遍曆
字典遍曆過程可以只遍曆值的集合,也可以只遍曆鍵的集合,也可以同時遍曆。這些遍曆過程都是通過for-in迴圈實現的。
var studentDictionary = [
102 :
"張三",
105 :
"李四",
109 :
"王五"]
print(
"---遍曆鍵---")
for studentID
in studentDictionary.keys {
print(
"學號:\(studentID)")
}
print(
"---遍曆值---")
for studentName
in studentDictionary.values {
print(
"學生:\(studentName)")
}
print(
"---遍曆鍵:值---")
for (studentID, studentName)
in studentDictionary {
print (
"\(studentID) : \(studentName)")
}
運行結果如下:
---遍曆鍵---
學號:105
學號:102
學號:109
---遍曆值---
學生:李四
學生:張三
學生:王五
---遍曆鍵:值---
105 : 李四
102 : 張三
109 : 王五
——Swift
中數組集合
數組(Array)是一串有序的由相同類型元素構成的集合。數組中的集合元素是有序的,可以重複出現。
聲明一個Array類型的時候可以使用下面的語句之一。
var studentList1: Array<String>
var studentList2: [String]
聲明的Array還不能用,還需要進行初始化,Array類型往往在聲明的同時進行初始化。範例程式碼如下:
var studentList1: Array<String> = ["張三","李四","王五","趙六"]
var studentList2: [String] = ["張三","李四","王五","趙六"]
let studentList3: [String] = ["張三","李四","王五","趙六"]
var studentList4 = [String]()
數組遍曆
數組最常用的操作是遍曆,就是將數組中的每一個元素取出來,進行操作或計算。整個遍曆過程與迴圈分不開,可以使用for-in迴圈。
var studentList: [String] = ["張三","李四","王五"]
for item in studentList {
print (item)
}
for (index, value) in studentList.enumerate() {
print("Item \(index + 1 ) : \(value)")
}
運行結果如下:
張三
李四
王五
Item 1 : 張三
Item 2 : 李四
Item 3 : 王五
——
函數參數傳遞
函數的文法格式如下:
func函數名(參數列表)->傳回值類型{
語句組
return傳回值
}
函數:關鍵字是func。
多個參數列表之間可以用逗號(,)分隔,也可以沒有參數。
使用箭頭“->”指示傳回值類型。傳回值有單個值和多個值。如果函數沒有傳回值,則“->傳回值類型”部分可以省略。
如果函數有傳回值,就需要在函數體最後使用return語句;如果沒有傳回值,則函數體中可以省略return語句。
函數定義範例程式碼如下:
func rectangleArea(width:Double, height:Double) -> Double {
let area = width * height
return area
}
print("320x480的長方形的面積:\(rectangleArea(320,height:480))")
下面介紹幾種不同形式的傳遞參數。
1.使用外部參數名
為每個參數提供一個可以在函數外部使用的名稱,稱為外部參數名,修改rectangleArea函數的定義如下:
func rectangleArea(W width:Double, H height:Double) -> Double {
let area = width * height
return area
}
在局部參數名之前給一個“外部參數名”,用空格分隔。定義代碼中的W和H就是外部參數名。調用代碼如下:
print("320x480的長方形的面積:\(rectangleArea(W:320,H:480))")
如果我們提供了外部參數名,那麼在函數調用時,必須使用外部參數名,所以W和H不能省略。
2.省略外部參數名
Swift 2.0提供省略外部參數名可能,在定義函數時,使用底線(_)表示外部參數名,範例程式碼如下:
func rectangleArea(width:Double, _ height:Double) -> Double {
let area = width * height
return area
}
這樣函數在調用時就可以省略外部參數名,代碼如下:
print("320x480的長方形的面積:\(rectangleArea(320,480))")
在定義函數時第一個參數不需要使用底線(_),預設第一個參數名是省略的,其他參數名要想省略則需要使用底線(_)符號。
3.參數預設值
在定義函數的時候可以為參數設定一個預設值,當調用函數的時候可以忽略該參數。看下面的一個樣本:
func makecoffee(type :String = "卡布奇諾") -> String {
return "製作一杯\(type)咖啡。"
}
在調用的時候,如果調用者沒有傳遞參數,則使用預設值。調用代碼如下:
let coffee1= makecoffee("拿鐵")
let coffee2= makecoffee()
最後輸出結果如下:
製作一杯拿鐵咖啡。
製作一杯卡布奇諾咖啡。
4.可變參數
Swift中函數的參數個數可以變化,它可以接受不確定數量的輸入型別參數,它們具有相同的類型。我們可以通過在參數類型名後面加入(...)的方式來指示這是可變參數。
下面看一個樣本:
func sum(numbers:Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total
}
下面是兩次調用sum函數代碼:
sum(100.0, 20, 30)
sum(30, 80)
可以看到每次傳遞參數的個數是不同的。
這是我在學Swift整理的基礎筆記,希望給更多剛學IOS開發人員帶來協助,在這裡博主非常感謝大家的支援!
更多的請到參考我下一篇博文。之後還在持續更新中。。。
從0開始學Swift筆記整理(一)