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)
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
//
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()
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)