2016-03-18 8 views
1

私は、地図上にピンを配置し、この場所に関連付けられたFlickr画像を見ることができるアプリを開発中です。Swiftでの初期設定のオーバーライド

アプリはほとんど動作していますが、いくつかのクラスでは初期化子に問題があります。具体的な例は次のとおりです。

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

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

誰かがこのコードの何が間違っているのか理解できますか?最初の行には、エラーメッセージが

初期化子はその スーパー

から指定イニシャライザをオーバーライドしないとself.init()との行にエラーがタイプの

値であると言います'- >'にはメンバー 'init'がありません

+1

どの基本クラスから継承していますか? –

答えて

1

あなたがNSObjectから継承されている場合は、あなたがNSObjectのベースイニシャライザをオーバーライドしているので、あなたのoverride init作品:

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 
    } 
} 
関連する問題