2016-04-08 4 views
3

Wie kann ich eine Erweiterung einer Klasse erstellen, die ein Protokoll implementiert?Erweitern Sie eine Klasse, die einem Protokoll entspricht?

So etwas:

protocol proto { 
    func hey() 
} 

und eine Klasse, die zu proto entspricht:

Class MyClass: UIViewController, proto { 
    func hey() { 
     print("Hey!") 
    } 
} 

und dann eine Verlängerung dieser Klasse, die aussehen würde: So

extension UIViewController where Self:proto { 
    func test() { 
     print("I'm extended!") 
    } 
} 

dass ich self.test() in MyClass anrufen kann.

Danke.

Antwort

1

Sie können nur das Protokoll erweitern, nicht den Typ. Bitte versuchen Sie Folgendes:

protocol proto { 
    func hey() 
} 

class MyClass: UIViewController, proto { 
    func hey() { 
     print("Hey!") 
    } 

    func test2() { 
     self.test() 
    } 
} 

extension proto where Self: UIViewController { 
    func test() { 
     print("I'm extended!") 
    } 
} 
1

Zuerst müssen Sie test Methode in proto deklarieren, so dass MyClass weiß, dass es diese Methode implementiert.

protocol proto { 
    func hey() 
    func test() 
} 

Auch Sie haben auf "reverse" die Aussagen in der Protokollerweiterung:

extension proto where Self : UIViewController { 
    func test() { 
     print("I'm extended!") 
    } 
} 

Danach wird MyClass auf magische Weise erweitert wird und Sie test Methode nennen kann:

class MyClass: UIViewController, proto { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     test() 
    } 
}