2016-03-18 144 views
1

我正在研究一个应用程序,您可以在地图上放置针脚并查看与此位置关联的Flickr图像。Swift覆盖初始化器

该应用程序几乎可以正常工作,但在某些类中,初始值设定项存在问题。一个具体的例子如下:

override init() { 
    session = NSURLSession.sharedSession() 
    super.init() 
} 

convenience init(delegate:HTTPClientProtocol) { 
    self.init() 
    self.delegate = delegate 
} 

有人可以请帮我找出这个代码有什么问题吗?在第一行中,错误消息指出

初始化器不会从它的 超

和上的线与self.init()覆盖一个指定初始化的错误的类型是

值'- >'has no member'init'

+1

您从哪个基类继承而来? –

回答

1

如果从NSObject继承,你override init的作品,因为你重写基初始化为NSObject

protocol HTTPClientProtocol { } 

class NSObj: NSObject { 

    var session: NSURLSession! 
    var delegate: HTTPClientProtocol? 

    override init() { 
     session = NSURLSession.sharedSession() 
     super.init() 
    } 

    convenience init(delegate:HTTPClientProtocol) { 
     self.init() 
     self.delegate = delegate 
    } 
} 

如果你的类是一个基类,没有从任何其他类继承,你override init韩元”因为你没有基类初始化器来覆盖。只需创建一个初始化程序和一个便利的初始化程序,调用您刚刚创建的指定初始化程序:

protocol HTTPClientProtocol { } 

class Obj { 

    var session: NSURLSession! 
    var delegate: HTTPClientProtocol? 

    init() { 
     session = NSURLSession.sharedSession() 
    } 

    convenience init(delegate:HTTPClientProtocol) { 
     self.init() 
     self.delegate = delegate 
    } 
}