<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 拓展 Extension ### 擴展計算型屬性和便利構造函數 ``` struct Point { var x = 0.0 var y = 0.0 } struct Size { var width = 0.0 var height = 0.0 } class Rectangle { var origin = Point() var size = Size() init (origin: Point, size: Size) { self.origin = origin self.size = size } } // 拓展 Rectangle extension Rectangle { func translate(x: Double,y: Double) { self.origin.x += x self.origin.y += y } } let rect = Rectangle(origin: Point(), size: Size(width: 4, height: 5)) rect.translate(x: 10, y: 10) rect // 擴展計算型屬性和擴展便利構造函數 extension Rectangle{ // var center: Point = Point() // 不允許擴展存儲型屬性 var center: Point { get{ let centerX = origin.x + size.width/2 let centerY = origin.y + size.height/2 return Point(x: centerX, y: centerY) } set{ origin.x = newValue.x - size.width/2 origin.y = newValue.y - size.height/2 } } // 擴展構造函數 - 擴展中加入構造函數必須是一個便利的 convenience 構造函數,使用 self.init() 的方式引用當前對象實例化的指定構造函數 convenience init(center: Point, size: Size){ let originX = center.x - size.width/2 let originY = center.y - size.height/2 self.init(origin: Point(x: originX, y: originY),size: size) } } ``` ### 擴展嵌套枚舉 ``` class UI{ enum Theme{ case DayMode case NightMode } var fontColor: UIColor! var backgroundColor: UIColor! var themeMode: Theme = .DayMode{ didSet{ self.changeTheme(themeMode: self.themeMode) } } init(){ self.themeMode = .DayMode self.changeTheme(themeMode: self.themeMode) } init(themeMode: Theme){ self.themeMode = themeMode self.changeTheme(themeMode: themeMode) } func changeTheme( themeMode: Theme ){ switch(themeMode){ case .DayMode: fontColor = UIColor.black backgroundColor = UIColor.white case .NightMode: fontColor = UIColor.white backgroundColor = UIColor.black } } } let ui = UI() ui.themeMode ui.fontColor ui.backgroundColor ui.themeMode = UI.Theme.NightMode ui.themeMode ui.fontColor ui.backgroundColor ``` ### 使用 extension 擴展系統類庫 ``` extension Int{ // 計算平方 var square: Int{ return self * self } // 計算立方 var cube: Int{ return self * self * self } // 擴展方法 判斷整型是否在前閉后開的范圍內 func inRange(closedLeft left: Int, opendRight right: Int) -> Bool { return self >= left && self < right } // 擴展方法 func repetitions( task: () -> Void ){ for _ in 0 ..< self { task() } } } let num = 8 num.square // 64 num.cube // 512 let index = 10 index.inRange(closedLeft: 0, opendRight: 20) // 判斷 index 是否在 0 ..< 20 num.repetitions{ print("Hello,Swift!") } ``` ## Swift 泛型 Generic 泛型:是指有一套通用的邏輯,不與類型相關。例如交換兩個參數的值,如下: ``` func swapTwoInt( _ a: inout Int , _ b: inout Int) { (a,b) = (b,a) } var a: Int = 0 var b: Int = 6 swapTwoInt(&a, &b) a b // 上述函數定義中,如果需求要交換兩個浮點數,那么我們又需要定義類似如下函數來適應變化。 func swapTwoDouble(_ a: inout Double , _ b: inout Double) { (a,b) = (b,a) } ``` > 以上函數不管是交換整型還是交換浮點型,都是給兩個遍歷交換相互的值。那我們可以通過泛型對這種需求做改進。 ``` // generic function func swapTwoThings<T>(_ a: inout T , _ b: inout T) { (a,b) = (b,a) } var hello = "Hello" var bye = "Bye" swapTwoThings(&hello, &bye) hello bye swapTwoThings(&a, &b) a b swap(&a, &b) // Swift 中的一個泛型函數 ``` > 使用泛型可以創建更加通用的函數。 ### 泛型類型 泛型函數與泛型語法。 ``` let arr:Array<Int> = Array<Int>() let dict = Dictionary<String,Int>() let set = Set<Float>() // 創建自定義數據結構 棧(后進先出) struct Stack<T>{ // 存儲棧的內容,數組類型 var items = [T]() func isEmpty() -> Bool{ return items.count == 0 } mutating func push(item: T) { items.append(item) } mutating func pop() -> T? { guard !self.isEmpty() else { return nil } return items.removeLast() } } // 擴展 Stack extension Stack{ func top() -> T? { return items.last } func count() -> Int { return items.count } } var s = Stack<Int>() // 存儲Int類型的棧 s.push(item: 1) s.push(item: 2) s.pop() // 2 var ss = Stack<String>() // 聲明存儲String類型的棧 ss.top() // nil // 兩個數據類型的泛型 struct Pair<T1,T2> { // 取不同的泛型類型名稱 var a: T1 var b: T2 } var pair = Pair<Int,String>(a: 0 , b: "Hello") // 成功創建兩個數據類型的泛型 pair ```
                  <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>

                              哎呀哎呀视频在线观看