web-dev-qa-db-ja.com

Objective-Cで演算子をオーバーロードできますか?

Objective-Cでの演算子の使用をオーバーライドすることは可能ですか?

例えば

myClassInstance + myClassInstance

2つを追加するカスタム関数を呼び出します。

55
123hal321

演算子のオーバーロードはObjective-Cの機能ではありません。クラスの2つのインスタンスを一緒に追加できる場合は、メソッドを提供し、そのメソッドを使用してそれらを追加できるようにします。

Thing *result = [thingOne thingByAddingThing:thingTwo];

または、クラスが変更可能な場合:

[thingOne addThing:thingTwo];
90
dreamlax

いいえ、Objective-Cではこれを行うことはできません。

16
Vadim Shender

これは、objCの後継である Swift で行うことができます。また、Objective-CとSwiftは連携して動作するように作成されているため、 これ は興味深いかもしれません。

7
Damiaan Dufaux

オブジェクトの添え字をサポートしたい場合があります。添え字はnot演算子のオーバーロードですが、コレクションオブジェクトには便利です。 NSArrayとNSDictionaryはどちらも添え字をサポートしています。例えば:

_NSMutableArray *a = [NSMutableArray new]; a[0] = @"Hello";_

インデックスの添え字をサポートする方法は、以下を実装することです。

-(id)objectAtIndexedSubscript:(NSUInteger)idx; -(void)setObject:(id)newObject atIndexedSubscript:(NSUInteger)idx];

3
jack

いいえ、Objective-Cは演算子のオーバーロードをサポートしていません。

0
DURGESH