0

プロパティ「ago」を持つカスタム オブジェクトがあります。

このプロパティにアクセスしたい場合は、使用できます

object.age

プロパティ「年齢」を持つカスタムオブジェクトの配列がある場合、このように年齢にアクセスできると予想されます(配列の5番目のオブジェクト)

myArray[4].age

ただし、ブラケット構文でのみ機能します

[myArray[4] age]

配列内で使用できるドット構文はありませんか、それとも何が欠けていますか?

前もって感謝します

4

3 に答える 3

2

コンパイラがオブジェクトのクラスを認識している場合にのみ、ドット構文を使用できます。

id x = array[4]; 
float age = [x age];

SomeClass *x = array[4];
float age = x.age;

最初のバージョンはかなり危険であることに注意してください。次のような 1 つのプロジェクトでレガシー コードを処理する必要がありました。

NSString *recommendation = [[[[[[[dataArray 
    objectAtIndex:indexPath.section] mainPerson] friends] 
    objectAtIndex:indexPath.row] recommendations] 
    objectAtIndex:0] title];

各オブジェクトにはカスタム クラスがありました。各メッセージは潜在的なクラッシュです。デバッグするのは悪夢です。

私のアドバイス:そこに行かず、コンパイラの強力な型付けサポートを利用してください。

コードを数行追加して、予測不能で検証されていないオブジェクトに対してランダムなメッセージを送信しないようにしてください。

于 2013-08-09T10:25:02.317 に答える
1

Objective-C は動的に型指定される言語であるため、厳密に型指定されたコレクションはありません。したがって、コンパイラは、コレクション (この場合は配列) に格納されているオブジェクトの型を認識できません。これが、ドット構文を使用できない理由です。コンパイラが表示するエラーは ですProperty 'age' is not found on object of type 'id'。これは、コレクションから返されたオブジェクトのタイプが であることを示していますid

ドット表記を使用する場合は、キャストを含める必要があります。

NSUInteger age = ((MyClass *) myArray[4]).age;

少し醜いだけでなく、配列にタイプ のオブジェクトのみが含まれることを100%確信している場合にのみ、これを行いますMyClass

于 2013-08-09T10:53:06.450 に答える
-4

[[myArray objectAtIndex:4]年齢]

于 2013-08-09T10:14:31.667 に答える