Try   HackMD

2021-02-02| Swift | Protocols

tags: swift gobelins

Equivalent de l'interface en Java

Protocol simple, class simple

protocol Proto1 {
    func start()
    func pause()
    func stop()
}

protocol Proto2 {
    func sayHello()
    func sayThanks()
    func sayBye()
}

class Move: Proto1 {
    func start() {
        
    }
    
    func pause() {
        
    }
    
    func stop() {
        
    }
}

class Speak: Proto2 {
    func sayHello() {
        
    }
    
    func sayThanks() {
        
    }
    
    func sayBye() {
        
    }
}

var moves: [Proto1] = [Move()]

for m in moves {
    m.start()
}

func haveDiscussion(sentences: Proto2) {
    sentences.sayHello()
}

Différents Protocols

protocol MonProtocolAvecFonctionStatic {
    static func b()
}

protocol P {
    func a(_ p:Int) -> Int
}

protocol ProtocolInutile {
    func fonctionDeProtocolInutile()
}

Class a protocols multiples

class JeSuisUneClasseSansProtocol {
    
}

class JeSuisUneClasseRespectantUnProtocol:ProtocolInutile {
    func fonctionDeProtocolInutile() {}
}

class JeSuisUneClasseRespectantPlusieursProtocol:ProtocolInutile,P,MonProtocolAvecFonctionStatic {
    
    // Fonction provenant de 'ProtocolInutile'
    func fonctionDeProtocolInutile() {}
    
    // Fonction provenant de 'P'
    func a(_ p: Int) -> Int { return p }
    
    static func b() { print("from static") }
}

let sansProtocol = JeSuisUneClasseSansProtocol()

let unProtocol = JeSuisUneClasseRespectantUnProtocol()
unProtocol.fonctionDeProtocolInutile()

let plusieursProtocol = JeSuisUneClasseRespectantPlusieursProtocol()
plusieursProtocol.fonctionDeProtocolInutile()
plusieursProtocol.a(3)
JeSuisUneClasseRespectantPlusieursProtocol.b()