1.swift是面向?qū)ο筮€是函數(shù)式編程語言
swift是函數(shù)式也是面向?qū)ο蟮恼Z言。
swift是面向?qū)ο笳Z言嫌变,因為他支持類的封裝、多態(tài)躬它、繼承腾啥。
swift是函數(shù)式語言,因為他支持map冯吓、reduce倘待、filter、flatmap等去除中間狀態(tài)组贺、數(shù)學(xué)函數(shù)式的方法凸舵,更加強調(diào)運算結(jié)果而非過程。
2. swift中 class和struct區(qū)別
swift中 class是引用類型失尖,struct是值類型啊奄。class在使用時是引用一個地址,使用一個指向雹仿,struct是當賦值和傳遞時候會進行值的復(fù)制增热。
另外class和struct的區(qū)別和聯(lián)系
class可以繼承,struct不可以
class類型轉(zhuǎn)換可以在運行時檢查和解釋一個實例的類型
class 可以deinit一個對象
類可以被多次引用
struct 先比來說結(jié)構(gòu)小胧辽,適用于復(fù)制操作峻仇,相比于class對象引用 更加安全
struct不用擔(dān)心內(nèi)存泄漏或者多線程沖突。
struct和class 都可以使用protocol
3. 訪問權(quán)限
Open, Public,Inernal,File-private,Private權(quán)限依次遞減邑商。
4. 關(guān)鍵詞 strong摄咆,weak,unowned
strong,weak 和oc中作用一樣
unowned和weak使用差別如下:
- 當訪問對象訪問時候可能會被釋放的時候使用weak
- 當訪問對象確定不可能被釋放時候用unowned
實際項目中多半用weak人断,相對安全吭从。
4. 屬性觀察
var title:String{
willSet {
//屬性將要修改
}
willSet {
//屬性已經(jīng)修改
}
}
其實就是oc里面的kvo 只不過把kvo里面的方法外化了
5. mutating
主要作用是定義 struct或者enum里面是否可以修改自己的成員變量,主要是protocol定義的時候
protocol person{
var name: String{get set}
}
struct devid: person{
var name:String
//下面這一句就應(yīng)該加上mutating 表明此方法會修改成員變量
mutating func changeName(name:String){
self.name = name
}
}
6. swift實現(xiàn)|| 操作
主要是@autoclosure 他可以讓left判斷失效時候 走 else的時候再判斷right是否有效 主要是考慮 如果表達式過于復(fù)雜 當left判斷生效之后可以省略右邊表達式的計算恶迈,節(jié)省資源涩金。
func || (left: Bool, right: @autoclosure()->Bool) ->Bool{
if left{
return true
}else{
return right()
}
}
7. 輸入任意一個數(shù),輸出為輸入整數(shù)+2
利用swift carraying特性
func add(_ num:Int) -> (Int) ->Int{
return {
val in
return num + val
}
}
let addThree = add(3)
print(addThree(5))
輸出結(jié)果:8