1. 程式人生 > >Swift 介面和擴充套件(Protocol&Extension)

Swift 介面和擴充套件(Protocol&Extension)

開發經常用到這兩個,從實現的角度來講他們的功能吧!

protocol

protocol ExampleProtocol {
    var simpleDescription: String { get }
    mutating func adjust()
}

類、列舉和結構體都可以實現介面。

先看一下類:

class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "A very simple class."
    var anotherProperty: Int = 69105
    func adjust() {
        simpleDescription += " Now 100% adjusted."
    }
}

var oneSimp = SimpleClass()
oneSimp.adjust()

再看一下結構體:
struct SimpleStructure: ExampleProtocol {
    var simpleDescription: String = " struct"
    mutating func adjust() {
        simpleDescription += "(adjusted)"
    }
}
var oneStruct = SimpleStructure()
oneStruct.adjust()

列舉也可以的:

enum SimpleEnum: ExampleProtocol {
    case first(String),second(String)
    var simpleDescription: String {
        get {
            switch self {
            case .first("first"):
                return "first"
            default:
                return "second"
            }
        }
        set {
            switch self {
            case .first("first"):
                self = .first(newValue)
            default:
                self = .second(newValue)
            }
        }
    }
    mutating func adjust() {
        switch self {
        case .first:
            self = .first("1" + "first")
        default:
            self = .second("2" + "second")
        }
    }
}

var oneEnum = SimpleEnum.first("lv")
oneEnum.adjust()
Extesion:

使用extension來為現有的型別新增功能,比如新增一個計算屬性的方法。你可以使用擴充套件

來給任意型別新增協議,甚至是你從外部庫或者框架中匯入的型別。

extension Int: ExampleProtocol {
    var simpleDescription: String{
        return "Int"
    }
    mutating func adjust() {
        self += 10
    }
}

使用起來特別方便,好好學習吧,加油!