7

WKWebView をサブクラス化しようとしています。独自の初期化子を実装すると、次のエラーが発生しました。

'required' initializer 'init(coder:)' must be provided by subclass of 'WKWebView'

わかりました、UIView のサブクラスに実装する必要があることはよく知られています。UIView の直接のサブクラスの場合は実装するだけで機能しますが、WKWebView ではそれほど単純ではないようです。Fix-it のヒントに従い、次のスニペットをコードに追加しました。

required @availability(*, unavailable) convenience init!(coder: NSCoder!) {
        fatalError("init(coder:) has not been implemented")
    }

したがって、次のようなクラスを取得します。

import WebKit


class TSWebView : WKWebView {

    let s: String
    let i: Int

    init(s: String, i: Int) {
        self.s = s
        self.i = i
        super.init(frame: CGRectZero, configuration: WKWebViewConfiguration())
    }

    required @availability(*, unavailable) convenience init!(coder: NSCoder!) {
        fatalError("init(coder:) has not been implemented")
    }
}

ただし、これを行うと、他に次の 4 つのエラーが発生します。

expected declaration
    required @availability(*, unavailable) convenience init!(coder: NSCoder!) {

consecutive declarations on a line must be separated by ';'
    required @availability(*, unavailable) convenience init!(coder: NSCoder!) {

cannot override 'init' which has been marked unavailable
    required @availability(*, unavailable) convenience init!(coder: NSCoder!) {

'required' modifier must be present on all overrides of a required initializer
    required @availability(*, unavailable) convenience init!(coder: NSCoder!) {

何か案は?Xcode のバージョンは 6.1.1 (6A2008a) です。どうもありがとう。

4

3 に答える 3

1

余分な装飾を取り除いてみてください:

import WebKit

class TSWebView : WKWebView {

    let s: String
    let i: Int

    init(s: String, i: Int) {
        self.s = s
        self.i = i
        super.init(frame: CGRectZero, configuration: WKWebViewConfiguration())
    }

    convenience init!(coder: NSCoder!) {
        super.init(coder:coder)
    }
}

「availablity(*,available)」の要点は、イニシャライザを呼び出せないようにすることだと思いますが(したがって、WKWebViewを効果的にサブクラス化できません)。

于 2014-12-15T17:20:21.827 に答える