2016-03-18 194 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 
    } 
}