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

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(_:)是一個函數,可以將變量或常量輸出到控制檯swift

——使用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標識符和關鍵字

標識符就是給變量、常量、方法、函數、枚舉、結構體、類、協議等由開發人員指定的名字。app

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種形式

一、不指定數據類型    var a1 = 10

二、指定數據類型      var a1:Int  = 10

三、使用分號          var a1: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提供八、1六、3二、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等其餘語言中,整型之間有兩種轉換方法:

一、 從小範圍數到大範圍數轉換是自動的;
二、 從大範圍數到小範圍數須要強制類型轉換,有可能形成數據精度的丟失。

而在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類型的時候可使用下面的語句之一。

varStringvarStringstudentDictionary1: Dictionary<Int,>
studentDictionary2: [Int:]

聲明的字典須要進行初始化才能使用,字典類型每每是在聲明的同時進行初始化的。

102"張三"105"李四"109"王五"var studentDictionary1: Dictionary<Int, String> 
= [:,:,:]
102"張三"105"李四"109"王五"var studentDictionary2 = [:,:,:]
102"張三"105"李四"109"王五"let studentDictionary3 = [:,:,:]

字典遍歷
字典遍歷過程能夠只遍歷值的集合,也能夠只遍歷鍵的集合,也能夠同時遍歷。這些遍歷過程都是經過for-in循環實現的。

var102"張三"105"李四"109"王五"studentDictionary = [:,:,:]
print"---遍歷鍵---"forinprint"學號:\(studentID)"()
studentIDstudentDictionary.keys { 
   ()
}
print"---遍歷值---"forinprint"學生:\(studentName)"()
studentNamestudentDictionary.values {
  ()
}
print"---遍歷鍵:值---"forinprint"\(studentID) : \(studentName)"()
(studentID, studentName)studentDictionary {
  ()
}

運行結果以下:
---遍歷鍵---
學號: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開發者帶來幫助,在這裏博主很是感謝你們的支持!

更多的請到參考我下一篇博文。以後還在持續更新中。。。

相關文章
相關標籤/搜索