Swiftメソッドプロトコル

1340 ワード

メソッドプロトコル


役割:クラス/構造体/列挙の方法を、より小さな組み合わせに分解し、柔軟性を向上させる
1.タイプメソッドプロトコル、前にstatic修飾を付ける
protocol AProtocol {
    static func aFun()
}

//class A:AProtocol {
//    static func aFun() {
//        
//    }
//}


class A:AProtocol {
    class func aFun() {
        print("AProtocol");
    }
}

class B:A {
    
}

B.aFun() //B 

//タイププロトコル、子クラスに親クラスのメソッドを継承させるために、実装メソッドstatic修飾をclass修飾に変更できます.
2.インスタンスメソッドプロトコル
// 
protocol RandomOpertable {
    func makeRandomInt() -> Int
}

struct MakeRandomInt:RandomOpertable {
    func makeRandomInt() -> Int {
        return Int(arc4random())
    }
}

let random1 = MakeRandomInt()
random1.makeRandomInt()

// , , 1-6 , , , 

struct MakeRandomIntMaxSix:RandomOpertable {
    func makeRandomInt() -> Int {
        return Int(arc4random())%6 + 1
    }
}

let random2 = MakeRandomIntMaxSix()

random2.makeRandomInt()

.......
//列挙自分のタイプの属性の値を変更する場合はmutating修飾が必要です
protocol Switchable {
    mutating func OnOff()
}

enum MySwitch:Switchable {
    case on,off
    mutating func OnOff() {
        switch self {  //self 
        case .off:
            self = .on
        default:
            self = .off
        }
    }
}

var mySwitch = MySwitch.off

mySwitch.OnOff()

print(mySwitch)