欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift Extension擴展得使用詳細介紹

 更新時間:2022年09月13日 14:56:52   作者:撲騰的蛾子  
在swift中,extension與Objective-C的category有點類似,但是extension比起category來說更加強大和靈活,它不僅可以擴展某種類型或結(jié)構(gòu)體的方法,同時它還可以與protocol等結(jié)合使用,編寫出更加靈活和強大的代碼

擴展(Extension)

1、Swift中的擴展,有點類似于OC中的分類(Category)

2、擴展可以為枚舉、結(jié)構(gòu)體、類、協(xié)議添加新功能

可以添加方法、計算屬性、下標、(便捷)初始化器、嵌套類型、協(xié)議等等

3、擴展不能辦到的事情

不能覆蓋原有的功能

不能添加存儲屬性,不能向已有的屬性添加屬性觀察器

不能添加父類

不能添加指定初始化器,不能添加反初始化器

。。。。

extension Double {
    var km: Double {
        self * 1_000.0
    }
    var m: Double {
        self
    }
    var dm: Double {
        self / 100.0
    }
    var cm: Double {
        self / 10.0
    }
    var mm: Double {
        self / 1_000.0
    }
}
var d = 100.0
d.km
d.m
d.dm
var arr: Array<Int> = [10, 20, 30]
extension Array {
    subscript(nullable idx: Int) -> Element? {
        if (startIndex ..< endIndex).contains(idx) {
            return self[idx]
        }
        return nil
    }
}
print(arr[nullable: 1] ?? 0)
extension Int {
    func repeats(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
    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
        }
    }
    subscript(digitIndex: Int) -> Int {
        var decimalBase = 1
        for _ in 0..<digitIndex {
            decimalBase *= 10
        }
        return (self / decimalBase) % 10
    }
}

協(xié)議與初始化器

class Person {
    var age: Int
    var name: String
    init(age: Int, name: String) {
        self.age = age
        self.name = name
    }
}
extension Person: Equatable {
    static func == (left: Person, right: Person) -> Bool {
        left.age == right.age && left.name == right.name
    }
    convenience init() {
        self.init(age: 0, name: "")
    }
}

1、如果希望自定義初始化器的同時,編譯器也能夠生成默認初始化器,那么可以在擴展中編寫自定義初始化器

struct Point {
    var x: Int = 0
    var y: Int = 0
}
extension Point {
    init(_ point: Point) {
        self.init(x: point.x, y: point.y)
    }
}

2、required初始化器不能寫在擴展中

協(xié)議

1、如果一個類型已經(jīng)實現(xiàn)了協(xié)議的所有要求,但是還沒有聲明它遵守了這個協(xié)議

可以通過擴展來讓它遵守這個協(xié)議

2、給協(xié)議進行擴展后,凡是遵守了這個協(xié)議的都會有對應(yīng)的擴展方法,以下面為例,編寫一個函數(shù),判斷一個證書是否為奇數(shù)。

extension BinaryInteger {
    func isOdd() -> Bool {
        self % 2 != 0
    }
}

3、擴展可以給協(xié)議提供默認實現(xiàn),也間接實現(xiàn) 可選協(xié)議 的效果

protocol TestProtocol {
    func test1()
}
extension TestProtocol {
    func test1() {
        print("TestProtocol test1")
    }
    func test2() {
        print("TestProtocol test2")
    }
}
class TestClass: TestProtocol {
    func test1() {
        print("TestClass test1")
    }
    func test2() {
        print("TestClass test2")
    }
}
var cls: TestProtocol = TestClass()
cls.test1() //TestClass test1
cls.test2() //TestProtocol test2

泛型

1、擴展中依然可以使用原類型中的泛型類型

2、符合條件才擴展

extension Stack: Equatable where E: Equatable {
}

到此這篇關(guān)于Swift Extension擴展得使用詳細介紹的文章就介紹到這了,更多相關(guān)Swift Extension內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Swift Access Control訪問控制與斷言詳細介紹

    Swift Access Control訪問控制與斷言詳細介紹

    這篇文章主要介紹了Swift Access Control訪問控制與斷言,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解,本文詳細講解了Swift中的基本數(shù)據(jù)類型和基本語法,例如常量和變量、注釋、分號、整數(shù)、數(shù)值類型轉(zhuǎn)換等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • swift自定義表格控件(UITableView)

    swift自定義表格控件(UITableView)

    這篇文章主要為大家詳細介紹了swift自定義表格控件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 在一個項目中同時使用Swift和Objective-C代碼混合編程的方法

    在一個項目中同時使用Swift和Objective-C代碼混合編程的方法

    這篇文章主要介紹了在一個項目中同時使用Swift和Objective-C代碼的方法,在一個工程中同時使用Swift和Objective-C混合語言編程的方法,需要的朋友可以參考下
    2014-07-07
  • Swift?Error的處理方法說明

    Swift?Error的處理方法說明

    wift?是一個類型嚴格的語言,在很多情況下各種不匹配或者強制解包出錯都會導(dǎo)致系統(tǒng)崩潰。所以我們需要進行異常處理,在swift中也叫錯誤處理Error
    2022-08-08
  • Swift心得筆記之字符串

    Swift心得筆記之字符串

    Swift 的 String 類型是值類型 。 如果您創(chuàng)建了一個新的字符串,那么當其進行常量、變量賦值操作或在函數(shù)/方法中傳遞時,會進行值拷貝。 任何情況下,都會對已有字符串值創(chuàng)建新副本,并對該新副本進行傳遞或賦值操作。
    2015-04-04
  • Swift編程之枚舉類型詳解

    Swift編程之枚舉類型詳解

    這篇文章主要介紹了Swift編程之枚舉類型,講解了枚舉語法、匹配枚舉值與switch語句、關(guān)聯(lián)值、原始值等內(nèi)容,Swift中枚舉類型是最重要的類型,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Swift版使用ThPullRefresh實現(xiàn)下拉上拉刷新數(shù)據(jù)

    Swift版使用ThPullRefresh實現(xiàn)下拉上拉刷新數(shù)據(jù)

    這篇文章主要介紹了Swift版使用ThPullRefresh實現(xiàn)下拉上拉刷新數(shù)據(jù),需要的朋友可以參考下
    2016-01-01
  • 在Swift程序中實現(xiàn)手勢識別的方法

    在Swift程序中實現(xiàn)手勢識別的方法

    這篇文章主要介紹了在Swift程序中實現(xiàn)手勢識別的方法,蘋果的Swift語言即將進入2.0開源階段,人氣爆棚中:D 需要的朋友可以參考下
    2015-07-07
  • 關(guān)于swift的個人小結(jié)

    關(guān)于swift的個人小結(jié)

    本文是個人對于目前學習swift的一些心得的匯總,這里分享給大家,希望大家能夠喜歡
    2016-12-12

最新評論