swift問題小結(jié)

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是當(dāng)賦值和傳遞時候會進行值的復(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使用差別如下:

  • 當(dāng)訪問對象訪問時候可能會被釋放的時候使用weak
  • 當(dāng)訪問對象確定不可能被釋放時候用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ù)雜 當(dāng)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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容