2009-11-06 48 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