問題タブ [class-extensions]

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.

0 投票する
1 に答える
184 参照

objective-c - クラス拡張子を使用して.mファイルに初期化メソッドを作成するのはいつですか。

私はAppleのチュートリアルの1つ(2番目のiOSアプリ)を試していました。基本的に、プライマリデータクラスとデータコントローラークラスがあります。コントローラクラスは、プライマリデータオブジェクトを保持する配列を作成することにより、それらを操作します。

突然これがポップアップします:

「...しかし、「マスターコレクションの作成」タスクは、データコントローラーオブジェクトのみが知る必要があるタスクです。このメソッドは他のオブジェクトに公開する必要がないため、ヘッダーで宣言する必要はありません。ファイル。"

そして、「マスターコレクション」の初期化は、ヘッダーファイルではなくクラス拡張子として.mファイルに表示されることがわかりました。なぜこれをしたいのですか?ヘッダーファイル内で初期化のメソッドを直接宣言することの何が問題になっていますか?

データコントローラーのヘッダーファイル:

これは対応する.mファイルです。

0 投票する
1 に答える
1026 参照

objective-c - コードを Xcode 3 から 4 に移動すると、エラーが発生します: @interface または @protocol 内で変数を宣言できません

古い iPhone アプリを Xcode 3 から Xcode 4 に移行しています。Xcode 3 でビルドされていたコードでこのエラーが発生します。実際、他のモジュールから実装の詳細を隠すために、意図的にこのように記述しました。しかし、Objective-C では何かが変わったようです。このコードはエラーを受け取るようになりました

@interface または @protocol 内で変数を宣言することはできません。

これは、.h ではなく .m ファイルの先頭にあるコードであることを忘れないでください。

0 投票する
4 に答える
8785 参照

objective-c - ObjectiveC:プライベートインスタンスプロパティを宣言する場所は?

次のクラス インターフェイスがあります。

次に実装:

これは Apple の人が WWDC で示したものですが、次のように _privateProperty をクラス拡張に入れない理由はありますか?

ありがとう!

0 投票する
1 に答える
413 参照

c# - Dotfuscator WP7 エディションと EnumExtention: フレンドシップが機能しませんでした

私たちのアプリケーションには、Enum の拡張機能があります。

プロジェクトのどこかに Enum と Func があります。

リリース モードでビルドした後、すべて問題なく動作し、次のようになります。

「_true は true で、_false は false です」

しかし、Dotfuscator がコードに取り組んだ後、次の結果が得られました。

「おっと! MethodNotFoundException」

そして、すべての機能がはいに設定されています

Dotfuscator のバージョン: PreEmptive ver4.9.7000 WindowsPhoneEdition

拡張機能の何が問題になっていますか?

PS私の英語でごめんなさい。

0 投票する
1 に答える
225 参照

objective-c - このカテゴリが機能する理由 カテゴリとクラスの拡張

これは、クラスの1つの実装ファイルにあるものです...

コード設定 #1

このコードでは、すべてが機能し、「someString」がログに記録されます。

しかし、私のコードはどういうわけか異なって見えるべきではありませんか? 私は実際にそのカテゴリを誤って使用しています (何かをコピー/貼り付けしたのですが、「PrivateMethods」がそこにあることに気づきませんでした。クラス拡張を使用するつもりでした)。

私のコードは実際には次のいずれかのように見えるべきではありません:

コード設定 #2

または:

コード設定 #3

この状況で起こっていることの背後にあるニュアンスは何ですか? コード設定 #1 とコード設定 #2 の違いは何ですか?

編集:セットアップ#3に関する質問

このように設定すると、何が達成されますか? これは「うまくいく」でしょうか?

0 投票する
2 に答える
1134 参照

objective-c - Objective-C のクラス拡張と継承に関する質問

特に達成したいことはありませんが、クラス拡張についてもっと学びたいと思っています。

これは、アップルのカテゴリと拡張から直接クラス拡張の説明です:

ただし、MyClass を拡張する MyClass2 があると仮定すると、それは私には完全に理にかなっています。

クラス拡張が関係していなければ、簡単に答えることができるいくつかの質問があります。

  • 実行時に、MyClassで割り当てself.value=2を行っているとき、または単にfloat x=self.valueを呼び出しているときに、どのセッターとゲッター @property が呼び出されますか? MyClass または MyClass2 ?
  • コンパイラは、少なくとも読み取り専用プロパティが再定義されているという警告を発行するべきではありませんか?
  • @property が ivar によってサポートされていることは知っていますが、最終的にいくつの ivar があるのでしょうか? これに関連して、ivarが設定するMyClass2の観点から同じ self.value を呼び出しますか?
0 投票する
1 に答える
1113 参照

ruby-on-rails - すべてのlibフォルダを含める方法は?

コア配列クラスを単純なメソッドで拡張したい:

array.rbをlib/core_extに入れ、application.rbでそれを要求しようとしました。

しかしundefined method 'to_hash' for ["var1", "var2", "var3"]:Array、モデルメソッドで使用しようとすると、それでも取得できます。もちろん、コードを変更した後、サーバーを再起動しました。

0 投票する
2 に答える
1120 参照

objective-c - サブクラスが誤ってスーパークラスのプライベートメソッドをオーバーライドしないようにする方法

私はライブラリを書いていますが、それは私ではない人々によって使用される可能性があります。

私がクラスを書いたとしましょう:

InterestingClass.h

InterestingClass.m

誰かが後でライブラリを使用していて、InterestingClass?:のサブクラスを作成することにした場合はどうなりますか?

InterestingSubClass.h

InterestingSubClass.m

将来のライブラリユーザーはinitWithIdentifier、スーパークラスのメソッドであるパブリックインターフェイスから見ることができます。このメソッドをオーバーライドする場合、おそらく(正しく)superclassサブクラスの実装でメソッドを呼び出す必要があると想定します。

ただし、スーパークラスの「プライベート」インターフェイスの無関係なメソッドと同じ名前のメソッド(サブクラスのプライベートインターフェイス)を誤って定義した場合はどうなりますか?スーパークラスのプライベートインターフェイスを読まないと、新しいメソッドを作成するだけでなく、スーパークラスの何かをオーバーライドしたこともわかりません。サブクラスの実装が予期せず呼び出される可能性があり、メソッドを呼び出すときにスーパークラスが実行することを期待している作業は実行されません。

私が読んだすべてのSOの質問は、これがObjCの動作方法であり、それを回避する方法がないことを示唆しているようです。これは事実ですか、それとも「プライベート」メソッドがオーバーライドされないように保護するために何かを行うことができますか?

または、スーパークラスからのメソッドの呼び出しをスコープして、サブクラスの実装ではなくスーパークラスの実装が確実に呼び出されるようにする方法はありますか?

0 投票する
5 に答える
31442 参照

objective-c - Objective-C クラスの拡張

かなり新しい Objective-C プログラマー (4 年間の Java 経験) として、クラス拡張をいつ使用するかを理解するのに苦労しているようです。私が理解したことから (間違っている場合は訂正してください)、カテゴリと拡張機能の主な違いは、拡張機能ではメインの実装内でメソッドを実装することを期待しているのに対し、カテゴリでは別の実装にすることができることです。 . また、主にプライベート メソッド用に拡張機能を使用しているようです。

これが私の最初の質問です。クラス拡張を使用してプライベート メソッドを宣言する場合と、まったく宣言しない場合の違いは何ですか (どちらの場合も実行時にコンパイルされるようです)。(例 1 対 2)

例 1

例 2

2 番目の質問: 拡張機能内で ivar を宣言することと、実装内で直接宣言することの違いは何ですか? (例 3 対 4)

例 3

例 4

コーディング規約について最後に質問があります。変数名の前にアンダースコア (_) を付ける必要があるのはいつですか?

ありがとうございました

0 投票する
2 に答える
206 参照

ios - 自分自身から NSMutableString を作成するときの NSString+Extension 警告

私が作成したiphoneアプリケーションで、NSStringへの拡張クラス。

NSString+Extensions.mクラス

メソッドの 1 つで、文字列を NSMutableString に変換する必要があります。

私はこれを使用しようとしました:

しかし、それは警告を出しています:

私の知る限り、メソッドを呼び出した文字列への参照ですよね?では、なぜ NSString* 型であってはならないのでしょうか? 自分自身で通常の NSString メソッドを使用できることを知っています。

この問題について何か考えはありますか?

ありがとう