Eine Eigenschaft in Objective-C kann keinen C-Array-Typ haben, da C-Arrays nicht als Wert übergeben werden können, z. Sie können keine C-Funktion schreiben, die ein Array als Parameter verwendet, oder ein Array einem anderen zuweisen.
Sie können einen C-Array auf eine Funktion von Adresse (oder Zeigern) passieren, das heißt der übergebene Wert ist die Adresse eines Arrays und die Funktion des Original-Array über diesen Zeiger zugreifen kann. Es muss darauf geachtet werden, dass das Array, dessen Adresse übergeben wird, mindestens so lange lebt, wie die Adresse verwendet werden kann. In C gibt es einen Standardtrick, wenn Sie ein Array nach Wert übergeben müssen: In C-Struktur sind Werttypen und Strukturen können Felder vom Array-Typ haben. Um ein Array als Wert zu übergeben, erstellen Sie einfach ein einzelnes Feld Struktur ...
Aber von Ihren Kommentaren wünschen Sie, dass Ihre Eigenschaft direkten Zugriff auf das Lesen und Ändern der ursprünglichen Array haben, so dass die Weitergabe der Adresse ist, was Sie brauchen.
Um die Dinge einfacher, definieren einige Typen zusammen mit der Eigenschaft:
@interface BoardModel : NSObject
typedef NSUInteger Board[5][5]; // Give the array a name
typedef Board *BoardPtr; // A pointer to a Board
@property (readonly) BoardPtr board; // Property return a pointer
@end
Die Definition des Arrays und Eigentum sind einfach:
@implementation BoardModel
{
Board _board;
}
- (BoardRef) board { return &_board; }
Jetzt an anderer Stelle von Ihnen eine BoardModel
erstellen und Erhalte einen Zeiger auf sein Array:
BoardModel *boardModel = [BoardModel new];
BoardPtr theBoard = boardModel.board;
und dann zugreifen Elemente des Arrays müssen indirekt durch theBoard
und Index, z.
... (*theBoard)[i][j] ...
Ein solcher Ausdruck direkt (und effizient) Zugriff auf das Array.
Wichtig: Der Wert in theBoard
gespeichert ist nur gültig, solange BoardModel
Objekt referenziert von boardModel
existiert - es ist ein direkter Zeiger in das Objekt. Als ein Zeiger auf das Innere eines Objekts funktioniert nicht arbeiten, um das Objekt am Leben zu halten.
HTH
Wie der Fehler angibt, können Sie keine Objective-C-Eigenschaft mit C-Array-Typen erstellen. Sie haben keine andere Wahl, als Setter/Getter-Methoden zu schreiben, die in Zeilen-/Spaltenindizes usw. übergeben werden. – rmaddy