2016-03-15 88 views
4

我有一個類斯威夫特 - 分段故障,符合協議

class Presenter<T: UIViewController where T: protocol<ViewInput, ViewController>>: NSObject 
{ 
    override init() 
    { 
    super.init() 

    Layer.sharedInstance.service.addListener(self) 
    } 
} 

我想Presenter符合一個更Protocol和編寫擴展:

extension Presenter: OneMoreProtocol 
{ 
    func doSomething() 
    { 
    self.update() 
    } 
} 

但這特羅的錯誤:發射紅外源文件..../Presenter.swift(分段故障)

協議看起來:

@objc protocol OneMoreProtocol: AnyObject 
{ 
    optional func doSomething() 
} 

所以,如果我刪除擴展的錯誤:就是在這種情況下,上述addListener拋出這個錯誤: 參數類型「演講者」不符合預期的類型「OneMoreProtocol」

如何使符合以正確的方式?

回答

0

現在我想我更好地理解這個問題。您添加的新協議標有@objc屬性。然後你必須標記與@objc這樣的擴展演示的方法:

@objc func doSomething() 

但你現在有一個更大的問題:「@objc沒有泛型類的擴展中支持」

我不確定你到底想做什麼,但是一個簡單的技巧就是一個協議擴展。

protocol OneMoreProtocol 
{ 
    func doSomething() 
} 

extension OneMoreProtocol { 
    func doSomething() {} 
} 

現在你已經爲doSomething實現了一個空的實現,所以你不必在協議被採用的任何地方編寫實現。

+0

嗯,我在Swift中是新手,我只是支持已經創建的源代碼,我不確定是否需要AnyObject以及實際上對我們做了什麼。 –

+0

謝謝,我編輯了協議功能。 –

+0

hm同樣的問題問題:由於信號:命令失敗:分段錯誤:11 –