問題タブ [designated-initializer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C99 構造指定初期化子およびその他の値
C99 では、次のようにメンバー名を使用して構造体のメンバーを初期化できることを認識しています。
したがって、以下は有効です:
また、初期化されていないメンバーは に設定されると言われてい0
ます。そう
ここi
に設定されます0
ただし、次の場合:
i
はまだ 0 に初期化されています。このような複合初期化を行う理由は何ですか。
objective-c - Xcode 6 で指定された初期化子のチェックをオフにする
コンパイル エラーが発生します。
コンパイル チェック済みの指定された初期化子は良いことかもしれませんが、今それを処理したくない場合は、どうすればこれをオフにできますか?
swift - 拡張機能として NSCoding を追加する
フレームワークのクラスを拡張して (ソースコードを直接編集したくない)、 に準拠させたいNSCoding
。
基本的に、ここに私がいる状況を単純化したものがあります:
問題はinit(coder aDecoder: NSCoder)
、ヘッダー ファイルによると、designated initializer
(でも、これは奇妙ではありませんか? である必要はありませんconvenience initializer
か? ) です。ただし、ドキュメントには、拡張機能は新しい指定された初期化子を追加できないと書かれています。
私の英語は完璧ではなく、何かを見逃したのかもしれません...それとも本当に不可能なのでしょうか?
objective-c - UIBarButtonItem でのこの初期化子の継承の問題の原因は何ですか?
UIBarButtonItem の単純な Swift サブクラスを作成しようとしています。
しかし、これをインスタンス化しようとすると:
コードは正しくコンパイルされますが、実行時に次のように失敗します。
この場合になぜこれが起こるのか、または一般的にこの問題を引き起こす原理がわかりません。初期化子は、スーパークラスでinit(text)
直接委譲する必要init(customView)
があります。なぜinit()
呼び出されるのですか?関与すべきではありません。
誰が何が起こっているのか説明できますか? 他のUIKitクラスをサブクラス化しようとしたときに、同様の問題が発生しました
objective-c - NSWindowController 初期化警告
ドキュメントベースのアプリを開発しています。ドキュメント ウィンドウ専用のウィンドウ コントローラーを使用して、-[NSDocument makeWindowControllers]
メソッドを呼び出しています。
ウィンドウコントローラーは次のように初期化されます。
@"Document"
これは、プロジェクトで作成されたメイン ドキュメント ウィンドウを含む .xib ファイルです。
ここでの論理的根拠は、このウィンドウ コントローラは常にこのタイプのウィンドウで初期化されるため、パラメータはハードコードされ、実装内に隠されているということです-init
(また、ウィンドウの所有者を に便利に設定しますself
)。
したがって、ウィンドウ コントローラ (私の場合はドキュメント クラス) をインスタンス化する側は、どの nib を使用するかを気にする必要はなく、単に を呼び出すことができます-init
。
問題は、指定された初期化子チェーンを壊していて、Xcode が次の警告を表示することです。
セマンティックの問題 スーパークラス '-initWithCoder:' の指定された初期化子のメソッド オーバーライドが見つかりません。
セマンティックの問題 指定された初期化子に、スーパー クラスの指定された初期化子への「スーパー」呼び出しがありません。
セマンティックの問題 スーパークラス '-initWithWindow:' の指定された初期化子のメソッド オーバーライドが見つかりません。
セマンティックの問題 指定されたイニシャライザが、指定されていないイニシャライザを呼び出しました。
への呼び出しを-initWithWindowNibName:owner:
1 に切り替えます-initWithWindow:
(その後、所有者を手動で設定しますか?); しかし、ペン先から直接作成する方法がわかりませんNSWindow
(または、これが正しいことなのかどうか)。
編集:インターフェイスでラベル-init
を付けたためにのみ警告がトリガーされていることを発見しました。NS_DESIGNATED_INITIALIZER
そのラベルを削除すると警告は消えますが、-init
事実上の指定された初期化子であるため、保持したいと思います。
objective-c - Objective-C: 指定された初期化子を呼び出さないのはなぜですか?
私はこのコードを継承しました:
そして、最初のメソッドが指定されたイニシャライザを呼び出さない正当な理由があるかどうか疑問に思っています (たとえば、このように、 init メソッドで init メソッドを自分で呼び出しても問題ありませんか? )?
つまり、なぜこれをしないのですか:
c - 指定された初期化子を使用して配列を初期化する際の奇妙な値
以下の配列を初期化すると、 を除いてすべての出力が正常に見えますvalues[3]
。何らかの理由でvalues[3]
初期化されvalues[0]+values[5]
、非常に大きな数値が出力されます。私の推測ではvalues[0]+values[5]
、メモリに適切に保存される前に割り当てようとしているのですが、誰かがそれを説明できれば素晴らしいでしょう。
出力は次のとおりです。