iOS Swift 擴(kuò)展(Extensions)

一 可以為類添加新功能
  1. UIViewController
extension UIViewController {
    // 為 UIViewController 添加的新功能寫到這里
}
  1. Double
extension Double {
    var km: Double { return self * 1_000.0 }
    var m : Double { return self }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1_000.0 }
    var ft: Double { return self / 3.28084 }
    var sq: Double { return self * self }
}
  1. ViewController
extension ViewController{
    func printfChars()
    {
        print("I am char")
    }
}
二 可變實例方法(Mutating Instance Methods)

通過擴(kuò)展添加的實例方法也可以修改該實例本身。結(jié)構(gòu)體和枚舉類型中修改 self 或其屬性的方法必須將該實例方法標(biāo)注為 mutating,正如來自原始實現(xiàn)的可變方法一樣。
下面的例子為 Swift 的 Int 類型添加了一個名為 square 的可變方法,用于計算原始值的平方值:
改變Int 值本身

extension Int {
    mutating func square() {
        self = self * self
    }
}
三 嵌套類型(Nested Types)

擴(kuò)展可以為已有的類、結(jié)構(gòu)體和枚舉添加新的嵌套類型:

extension Int {
    enum Kind {
        case Negative, Zero, Positive
    }
    var kind: Kind {
        switch self {
        case 0:
            return .Zero
        case let x where x > 0:
            return .Positive
        default:
            return .Negative
        }
    }
}

// 在ViewController: UIViewController 中
// viewDidLoad

self.printfChars()
let oneInch = 25.4.mm
print("One inch is \\(oneInch) meters") // One inch is 0.0254 meters
  let dou = 23.4.sq
  print("\\(dou)") // 547.56
let numbers = [1,2,4,5,6,3,0,-54,-65]
self.printIntegerKinds(numbers) // + + + + + + 0 - - 
var intNumb = 5
intNumb.square()
print("\\(intNumb)") // 25

該例子為 Int 添加了嵌套枚舉。這個名為Kind 的枚舉表示特定整數(shù)的類型。具體來說,就是表示整數(shù)是正數(shù)、零或者負(fù)數(shù)。
這個例子還為 Int 添加了一個計算型實例屬性,即 Kind,用來根據(jù)整數(shù)返回適當(dāng)?shù)?Kind 枚舉成員。
現(xiàn)在,這個嵌套枚舉可以和任意 Int 值一起使用了:

func printIntegerKinds(numbers: [Int]) {
        for number in numbers {
            switch number.kind {
            case .Negative:
                print("- ", terminator: "")
            case .Zero:
                print("0 ", terminator: "")
            case .Positive:
                print("+ ", terminator: "")
            }
        }
        print("")
    }
---------------------------------------

走心文章, 值得點贊 ---文/夏天然后
微博-點我@夏天是個大人了 || QQQ: 498143780

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容