SWIFT總結
一、類型:
swift是強類型的,也就說在編譯器編譯的時候知道某個變量的類型,如果兩個變量的類型不一樣不能進行操作,比如:
int a = 0;
float b = 2.5;
int total = a + b;
// 編譯時會報錯
二、字元串操作:
int peopleCount = 4;
"There are \(peopleCount) peoples"
OC中字元串的長度length和swift中的length傳回的長度有可能不一樣,通過utf16count傳回的才能和OC的length相同 字元串的拼接用加号“+”,比較相等用等号”==” ###三、類型推斷: 編譯器可以根據變量的值來推斷出其類型,這時候我們不需要明确指定它的類型,比如:
var count: Int = 4;
var count = 4;
// 這兩條語句是等價的
###四、IF語句 if語句中的條件必須顯示的表示為true或false,否則會報錯,比如:
var a = 3
if(3 > 0){
doSomething()
}
不能寫成
if( a ){
doSomething()
}
###五、類型 1. Int, Int8, Int16, Int32是不同類型,它們之間不能做運算操作; 2. float 是32位, double是64位,編譯器總是将某個字推斷成double類型的,而不是float型的 ###六、數組 數組是存儲相同類型的有序清單。 定義:
var peoples: [String] = [] // 顯示類型
var peoples = [String]() // 隐式類型
注意: 數組作為函數參數傳遞的時候,是值傳遞,至于數組中的元素是按照何種方式傳遞,取決于數組中元素的類型是值類型還是引用類型。 ###七、字典 存儲無序相同類型的集合
var people: [String: someClass] = [:]
var people = [String: someClass]()
var hight = ["wsy": 20]
###八、可選類型 聲明的時候加上一個問号“?”,如果通路可選類型必須進行拆包,否則會報錯,使用歎号“!”拆包,比如:
let dict = ["name" : "wsy"]
let name = dict["name"]
let greet = "Hello" + name!
// 直接對name進行拆包可能會導緻奔潰,因為name可能是nil,應該這樣寫
if let myName = name! {
let greet = "Hello" + myName
}
###九、泛型:
func maxValue (a: T, b: T) ->T {
if a > b {
return a
}
return b
}
###十、元組: 包含不同類型的值,可以作為函數的傳回值,比如:
let ice = (2, "Hello", "World")
// 通路: ice.0 ice.1 ...
let ice2(count:2, name:"Hello", greet: "World")
// 通路: ice2.count ice2.name ...
注意:如果某個值在分解的時候不需要,可以使用"_"替代
十一、Switch語句于OC的不同
- 不需要break;
- 使用fallthrough貫穿到下一個分支;
- case:可比對範圍、值、元組等,如:case 0…10, case: (0, , );
- 可使用where,比如:case let(index, size) where index > 3;
十二、類初始化
類初始化的時候,需要注意一些問題:
- 類中的屬性名相同時,需要使用self.
- 在init方法中可以改變常量的值
- 初始化需要初始化所有的屬性,如果有預設值可以不初始化
- 便捷初始化方法是指以來其他初始化方法實作初始化
十三、函數
外部參數:
func hello(externalName localName: Int){
}
如果想改變參數,必須聲明為var類型:
func hello(var localName: Int){
localName = 10
}
外部參數名和内部參數名相同用“#”:
func hello( #localName: Int){
}
參數預設值,用“=”号,如果參數沒有的時候為預設值:
func hello(externalName localName: Int = 5){
}
十四、閉包:
定義:{(參數清單) -> 傳回值類型 in 語句}
使用函數:
func customSort() -> (Int, Int) -> Bool{
func mySort( a: Int, b: Int) -> Bool{
return a
十五、寫在最後
- 類方法使用class關鍵字
- 使用final防止被重寫
- 當struct中的方法要改變struct中值的時候,該方法必須适應關鍵字mutating
- 存儲屬性:無getter盒setter方法
- 計算屬性:實作getter盒setter方法
- 延遲屬性:某個屬性在第一次使用的時候初始化
- var a: bool {get, set} // 可讀可寫
- 帶隐式拆箱的可空類型,用歎号代替文化,這樣使用的時候不需要拆箱,但是隻要建立可就必須有值
- 可空鍊,多個可空類型嵌套
- -