2016-04-08 17 views
3

プロトコルを実装するクラスを拡張するにはどうすればよいですか?プロトコルに準拠したクラスを拡張しますか?

そのような何か:

protocol proto { 
    func hey() 
} 

protoに準拠したクラス:

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

、次にようになり、そのクラスの拡張:だから

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

self.test()MyClassに呼び出すことができます。

ありがとうございました。

答えて

1

プロトコルを拡張するだけで、タイプを拡張することはできません。以下を試してください:

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

最初に、MyClassがこのメソッドを実装していることがわかるように、testメソッドをprotoに宣言する必要があります。

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

はまた、あなたは、プロトコル拡張中の文「逆転」する必要があります。MyClassが魔法延長され、その後

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

、あなたはそれにtestメソッドを呼び出すことができます。

class MyClass: UIViewController, proto { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     test() 
    } 
} 
関連する問題