從0開始學Swift筆記整理(一)

來源:互聯網
上載者:User

標籤:資料結構   方式   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筆記整理(一)

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.