Ruby では、任意のオブジェクトに対してメソッドを定義できます。
jack = "jack"
def jack.say_hi
puts "hi, I'm #{self}"
end
jack.say_hi
Objective-Cで同じことをすることは可能ですか? どのように?
Ruby では、任意のオブジェクトに対してメソッドを定義できます。
jack = "jack"
def jack.say_hi
puts "hi, I'm #{self}"
end
jack.say_hi
Objective-Cで同じことをすることは可能ですか? どのように?
簡単な答え: いいえ。
クラスの特定のインスタンスにメソッドを動的に追加する簡単な方法はありません。動的に実行する要件と 1 つのインスタンスに対してのみ実行する要件の両方を削除すると、カテゴリを使用できます。これは、既存のクラスにメソッドを追加するコンパイル時の方法であり、そのクラスのすべてのインスタンスです。
複雑な答え: はい。
Objective-C では、ランタイムはほぼすべてのことを行う関数のセットを提供します。その場で新しいクラスを作成し、それらにメソッドを追加し、インスタンスのクラスを動的に変更できます。このような機能を使用すると、Ruby コードと同等のものを実現できます。Objective-C のキー値監視(KVO) メカニズムは、これらの機能に基づいて構築されています。
ランタイム関数をこのように使用することは簡単なことではありません。Objective-C と Ruby はこの分野で異なるモデルを持っていることを受け入れ、Objective-C 言語モデルを使用してやりたいことを再設計することをお勧めします。ただし、このルックアップを実際に試してみたい場合は、「Objective-C ランタイム リファレンス」を参照してください。
HTH