<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## Swift 閉包 **Swift 中閉包是引用類型** 有些時候定義一個函數可能只需要使用一次, 閉包本質上是函數 ### 閉包寫法 一般寫法如下: ``` var arr:[Int] = [] for i in 0 ..< 100{ arr.append( Int(arc4random()%1000) ) } arr.sort(by: {(a:Int,b:Int) -> Bool in return a > b }) ``` > 在閉包的定義中,因為不會被外部調用,所以給閉包取外部的參數名沒有意義。 閉包的簡化寫法: ``` arr.sort(by: {(a:Int , b:Int)-> Bool in return a > b}) // 如果閉包的函數體只有一行的情況,我們可以將其寫在一行里。 arr.sort(by: {a , b in return a > b}) // Swift type inference. arr.sort(by: {a , b in a > b}) arr.sort(by: { $0 > $1 }) arr.sort(by: >) // ">" 符號本身就是函數. ``` ### 結尾閉包 Trailing Closure 如果需要傳遞的閉包在函數參數的末尾,我們可以使用結尾閉包的方式書寫,如下: ``` arr.sort(by: ){ a , b in return a > b } // 如果將閉包放到()外部,而原函數調用沒有任何參數需要傳遞,那么這里我們可以將小括號去掉。 arr.sort{ a , b in return a > b } ``` 使用結尾閉包的一個例子。 ``` var arr:[Int] = [] for i in 0 ..< 100{ arr.append( Int(arc4random()%1000) ) } var r = arr.map(){(number)-> String in var number = number var res = "" repeat { res = String(number%2) + res number /= 2 }while number != 0 return res } ``` ### 內容捕獲 一下是demo,隨機取100個數字,以100為中心,將離100最近的數字越靠前 ``` var arr:[Int] = [] for _ in 0 ..< 100{ arr.append( Int(arc4random()%1000) ) } arr var num = 100 arr.sort{ a , b in return abs(a - num ) < abs(b - num) } ``` > 在閉包內能自動捕獲外部變量,但是會有內存泄漏的問題。 ### 閉包和函數都有引用類型 ``` // 計算跑步的里程數,單位m func runningMetersWithMetersPerDay(metersPerDay: Int) -> () -> Int { var totalMeters = 0 // 跑步的總數 return { totalMeters += metersPerDay // 兩個變量都是通過閉包外部的內容捕獲獲得值的。 return totalMeters } // 返回閉包 } var planA = runningMetersWithMetersPerDay(metersPerDay: 5000) planA() // 5000 planA() // 10000 var planB = runningMetersWithMetersPerDay(metersPerDay: 1000) planB() // 1000 planB() // 2000 var anotherPlan = planA // 將閉包賦值給另一個變量 anotherPlan() // 15000 在調用的過程中它們的值會累加,說明是引用類型 planA() // 20000 在調用的過程中它們的值會累加,說明是引用類型 let planC = runningMetersWithMetersPerDay(metersPerDay: 2000) // 對于引用類型,不代表里面的值不能被修改 planC() // 2000 planC() // 4000 //planC = runningMetersWithMetersPerDay(metersPerDay: 3000) // 這句賦值會報錯 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看