2016-03-15 86 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 –