2009-11-06 47 views

回答

5

是的,你可以。您可以將結構作爲一個屬性公開(在這種情況下,您必須設置/獲取整個事物),或者編寫自定義訪問器,這些自定義訪問器將進入結構的字段中。

對於一個具體的例子,CGRect是一個結構(雖然它被一個typdef隱藏起來),這意味着UIView的框架屬性獲取並設置一個結構。

換句話說:

CGRect myFrame = CGRectMake(0,0,320,480); //CGRect is a struct 
myView.frame = myFrmae; //Setting a struct 
+0

你能解釋一點細節嗎? becoz我是C的新手。 – diana 2009-11-06 12:19:54

1

你只需要使用點符號來分配和訪問值。如果你有一個指向結構的指針,你也可以使用->

typedef struct { 
    int a; 
    double b; 
} SomeType; 

// Define some class which uses SomeType 
SomeType myVar; 

myVar.a = 1; 
myVar.b = 1.0; 

SomeType* myPtr = &myVar; 

NSLog (@"%i", myPtr->a); 

// This works... 
SomeType mySecondVar = myVar; 

// But you have to be careful in cases where you have pointers rather than values. 
// So this wouldn't work if either element was a C string or an array. 
0

是的,並且有一個簡單的方法可以使用Objective-C 2.0屬性訪問該結構。考慮Stephens post中的以下結構。

typedef struct { 
    int a; 
    double b; 
} SomeType; 

在您的.h文件中,你會宣佈該成員在@interface

@interface AClass : NSObject{ 
    SomeType member; 
} 

@property SomeType member; 
@end 

請記住,如果你選擇去使用指針在這裏,您將需要管理自己的記憶。

而在你的@implementation(你.m文件),不要忘記添加@synthesize

@implementation AClass 
@synthesize member; 
@end 

我希望這有助於。

+0

'assign'是合成屬性的默認行爲,運行時足夠聰明以知道不保留結構。它可以輕鬆查看它的類型編碼並查看它不是Objective-C對象。 – 2009-11-06 16:31:43

+0

謝謝,我會進行編輯。 – Randaltor 2009-11-06 17:13:03