私はUINavigationController
とUITableViewController
のサブクラスを持っています。UINavigationControllerの便利な初期化サブクラスはサブクラス定数initを2回作成します
サブクラスを初期化するために、いくつかのconvenience init
メソッドを使用してスーパークラスの初期化子を呼び出すことにしました。
let someValue: SomeClass = SomeClass()
各クラスが正常に新しく作成されたconvenience init
メソッドを呼び出すことによって初期化されます。また、各サブクラスは、いくつかのlet
定数を有します。
問題がlet
定数がTWICEUINavigationController
サブクラスで初期化されていることです。
import UIKit
import PlaygroundSupport
final class Navigation: UINavigationController {
convenience init(anyObject: Any) {
self.init(rootViewController: UIViewController())
}
let service = Constant("Constant Initialization -> Navigation")
}
final class Table: UITableViewController {
convenience init(anyObject: Any) {
self.init(style: .plain)
}
let service = Constant("Constant Initialization -> Table")
}
class Constant: NSObject {
init(_ string: String) {
super.init()
debugPrint(string)
}
}
Navigation(anyObject: NSNull())
Table(anyObject: NSNull())
上記のようにconvenience init
を使用できますか?どうして?
なぜこれらの2つのケースでconvenience init
の動作が異なるのですか?
でチェック:バージョン8.2ベータ(8C30a)、バージョン8.2(8C38)、バージョン8.2.1(8C1002)
P.S.上記のコードの遊び場ログ:
"Constant Initialization -> Navigation"
"Constant Initialization -> Navigation"
"Constant Initialization -> Table"
ありがとうございました。そして、私はまだ利便性のinitの動作が2つのケースで異なっている理由を理解していませんか? – iWheelBuy
''利便性 '初期化は上記のObjective-Cの初期化パターンを使用します。ここでは2つのinit呼び出し(' [super init] 'と' [self.class alloc] init ...] 'があります。理解して、 '[self.class alloc] init ...]'イニシャライザパスに直接入りますので、あなたが見ている問題の原因となっている初期化をダブルにしません。 – BHendricks
私は両方のケースで私は指定されたイニシャライザを呼びますか? – iWheelBuy