Swift - Protocols and Extensions

3936 ワード

The Swift Programming LanguageのコードにEXPERIMENTの一部を追加
import UIKit



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 a = SimpleClass()

a.adjust()

let aDescription = a.simpleDescription



struct SimpleStructure: ExampleProtocol {

    var simpleDescription: String = "A simple structure"

    mutating func adjust() {

        simpleDescription += " (adjusted)"

    }

}

var b = SimpleStructure()

b.adjust()

let bDescription = b.simpleDescription



enum SimpleEnum: ExampleProtocol {

    case SIMPLE(String)

    var simpleDescription: String {

        get {

            switch self {

            case let .SIMPLE(str):

                return str

            }

        }

    }

    mutating func adjust() {

        switch self {

        case let .SIMPLE(str):

            self = .SIMPLE(str + " (adjusted)")

        }

    }

}

var c = SimpleEnum.SIMPLE("A simple enum")

c.simpleDescription

c.adjust()

c.simpleDescription



extension Int: ExampleProtocol {

    var simpleDescription: String {

        return "The number \(self)"

    }

    mutating func adjust() {

        self += 42

    }

}

var d = 7

d.simpleDescription

d.adjust()



let protocolValue: ExampleProtocol = a

protocolValue.simpleDescription