Swift 是一種適用於 iOS 和 OS X 應用的全新編程語言,它創建在最好的 C 和 Objective-C 語言之上,而且沒有 C 語言的兼容性限制。Swift 採用安全的編程模式,增長了現代功能使 編程更容易、更靈活、更有趣。Swift 以成熟且備受寵愛的 Cocoa 和 Cocoa Touch 框架爲 支撐,這是一個從新構想軟件開發的機會。 算法
import Foundation //表示引入Foundation框架數據庫
var str = "Hello World" //聲明str變量,var表示聲明變量編程
print(str) //print(_:)是一個函數,可以將變量或常量輸出到控制檯swift
Swift程序不能在Windows其餘平臺編譯和運行,有人提供了一個網站swiftstub.com,能夠在任何平臺下編譯和運行Swift程序。數組
在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程序運行 ①區域是代碼編寫視圖;②區域是運行結果視圖;③區域是時間軸視圖;④區域是控制檯視圖,使用print等日誌函數將結果輸出到控制檯,能夠經過左下角的 按鈕隱藏和顯示控制檯。數據結構
標識符就是給變量、常量、方法、函數、枚舉、結構體、類、協議等由開發人員指定的名字。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聲明,雖然在業務層面上並非一個常量,而是防止程序運行過程當中錯誤地修改它引用。
print(_:)。輸出變量或常量到控制檯,而且換行。
print(_:_:)。輸出變量或常量到指定類型的流中,而且換行。
print(_:appendNewline:)。輸出變量或常量到控制檯,appendNewline參數是布爾值,true表示換行,false表示不換行。
print(_:_:appendNewline:) 。輸出變量或常量指定類型的流中,appendNewline參數是布爾值,true表示換行,false表示不換行。
一、不指定數據類型 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語言中主要的運算符包括算術、關係、邏輯、位運算符等
一元運算符:
- 取反符號 取反運算
++ 自加一 先取值再加一,或先加一再取值
-- 自減一 先取值再減一,或先減一再取值
二元運算符:
+ 加 求和,還可用String類型,進行字符串鏈接操做
- 減 求差
* 乘 求積
/ 除 求商
% 取餘 求餘數
幾個特殊運算符:
• 引用號(.):實例調用屬性、方法等操做符。
• 問號(?):用來聲明可選類型。
• 感嘆號(!):對可選類型值進行強制拆封。
• 箭頭(->):說明函數或方法返回值類型。
• 冒號運算符(:):用於字典集合分割「鍵值」對。
整型、浮點型、布爾型、字符、字符串這些類型是必定有的,其中集合、枚舉、結構體、類也是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 : 王五
數組(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開發者帶來幫助,在這裏博主很是感謝你們的支持!
更多的請到參考我下一篇博文。以後還在持續更新中。。。