問題タブ [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.
objective-c - プライベートメソッドを実装する手段としてのクラス拡張のしくみ
Objective-Cで「プライベートメソッド」を宣言する一般的な方法は、クラス拡張を作成し、プライベートとして作成したいメソッドを宣言することだと思います。
クラス拡張によってメソッドがプライベートとして機能する方法について詳しく知りたいです。
- 更新:私はこの質問を、間違っている空のカテゴリという用語で尋ねました。クラス拡張として変更しました
objective-c - クラス拡張の構文は変更されていますか?
以下のようなコードがありました。
XCode 4.0.2でコンパイルすると完璧に機能しました
今、私は XCode 4.2 + iOS SDK 5.0 へのアップグレード (このばかげた考えは既に自分のせいです) を行い、"Expected identifier or '(' before '{' token" というエラーが発生しました。
どんな助けでも本当に感謝しています。
objective-c - クラスをプライベートにプロトコルに準拠させたいのはなぜですか?
私は Apple のMVCNetworking サンプル プロジェクトを見てきましたが、インターフェイス定義の一部がAppDelegate
私を困惑させています。.h ファイルには次のものがあります。
しかし、.m ファイルには次のように記述されています。
したがって、このクラスは非公開でプロトコルに準拠しています。しかし、ヘッダーで公に宣言するのではなく、なぜこれを行う必要があるのでしょうか?
java - クラスの拡張機能を作成しますか?
C#やObjective Cなどの一部の言語では、クラス拡張を作成できます。つまり、既存のクラスを拡張しなくても、そのクラスにメソッドを追加できます。これはJavaで可能ですか?
iphone - インスタンス変数を NSData に追加する
したがって、Objective-C のカテゴリを使用して、サブクラス化を必要とせずにメソッドをクラスに追加できることを理解しています。また、これらのカテゴリを使用してインスタンス変数をクラスに追加できないことも理解しています。
インスタンス変数の追加に使用できるクラス拡張機能について少し読みましたが、クラス拡張機能を使用して NSData などの既存のクラスを変更する方法がわかりません。
私の問題は次のとおりです。
NSURL と NSData を含むコア データ モデルがあります。NSData は、NSURL のデータを表示します。ビューでデータを表示する必要がある場合、次のチェックを行います。 --- [NSData バイト] > 0 の場合、NSData を表示します。--- それ以外の場合は、NSURL でデータをフェッチし、返されたときにデータを表示します
十分に単純です。ただし、NSURL が更新されると問題が発生します。したがって、NSURL パスを新しい画像で変更すると、[NSData バイト] が既に 0 より大きいため、新しい画像を取得するための追加の呼び出しは行いません。
私がやりたいことは、データの取得元に関する情報を保持する URLKey というインスタンス変数を NSData に追加することです。CoreData を使用しているため、NSData をサブクラス化できません。
これに対する簡単な解決策を知っている人はいますか?おそらく、クラス拡張についての私の理解にギャップがあるか、単純な方法がないだけかもしれません。
ruby - Rubyでライブラリを拡張/パッチする最もDRYな方法は何ですか?
既存のメソッドを変更する既存のライブラリのモジュラー拡張を ruby で記述する最良の方法は何だろうか。コードの繰り返しを導入するべきではなく、オンデマンドでのみ使用する必要があります。
私が達成しようとしている特定のタスクは、標準に準拠していないサーバーNet::FTP
をサポートするために ruby のモジュールを拡張することです。このような拡張機能は、標準準拠のライブラリ IMHO から完全に分離する必要があります。
追加のファイルを必要とすることは、元のコードで何らかのスイッチを必要とすることさえないので、非常に良いと思いました。したがって、追加require 'net/ftp/forgiving'
により、元のライブラリは、あまり才能のないFTPサーバーの仲間に対してもう少し寛容になります.
関連ファイルは、Ruby のオープン クラスとモジュール アーキテクチャを利用して、FTP クラスにパッチを適用できます。上記にリンクされている風変わりな動作の例を修正するには、パッチを適用する必要がありNet::FTP#mkdir
ます。これは次のようになります。
ただし、これには、コードを DRY に保つために、何らかの形でオリジナルNet::FTP#mkdir
をキャッシュする必要があります。Net::FTP#original_mkdir
これは可能ですか?このパッチ適用/拡張方法を改善する方法について、さらに提案はありますか? それとも、まったく異なるアプローチでさえありますか?
objective-c - クラス拡張にivarを入れることの何が問題になっていますか?
Apple のドキュメントhereによると、これは私のコードで機能するはずです。
これは、iVar を宣言しようとしない場合に機能します。中括弧とその間にあるものを追加するとすぐに、この素晴らしい赤い警告が表示されます。
「{」トークンの前に識別子または「(」が必要です
何が起きてる?
objective-c - *.h および *.m ファイルの 2 つのインターフェイス
英語で申し訳ありませんが、心から話させてください:)私が取り組んでいるあるプロジェクトで、興味深い瞬間に気づきました。
*.h ファイルで宣言されたインターフェイス:
*.m ファイルで、別のインターフェイスを見つけました。
なぜそれが必要なのですか?そして、ポイントは何ですか?-これは便宜上のものだと思います。はい?
objective-c - カテゴリに関する客観的な C の説明?
私の初心者の心と手順では、クラスのカテゴリを作成するときに、新しいファイルに作成します
お気に入りNSArray+Shuffle.h and .m
しかし、たとえばViewControllerを作成すると、
私は実装に持っています:
だから私の質問は:
は何ですか
一部?、これはカテゴリ用ですか?または何の用途ですか? また、それがカテゴリ用である場合、なぜ新しいファイルではなくここで使用するのでしょうか?
ありがとう!
objective-c - Objective-CでのC#スタイルのクラス拡張
私はC#でかなりの経験を積んだ後、Objective-cを学んでいます。私がひどく見逃していることの1つは、すべてのプロジェクトで参照できる別のプロジェクトで拡張メソッドを作成できることです。ここにいくつかの素朴なc#があります:
Visual Studioでは、参照を追加するだけusing
で、bammyString.IsShortString()
はかなり役に立たないメソッドになります。
ですから、静的ライブラリを書きたいと思いますが、そこからどこに行くのかわかりません。
この静的ライブラリを作成する場合、1つの#import
ディレクティブを使用して、ライブラリ内のさまざまなファイル全体ですべてのメソッドを使用できますか、それとも各ヘッダーを個別にインポートする必要がありますか?