iOS,在Objective C中使用struct,结构值不能从超级视图分配

时间:2013-03-07 13:07:25

标签: ios objective-c struct

我正在尝试使用结构来存储三个值作为一个单元。我收到了一个错误:" Expression not assignable"当我尝试从对象的超级视图中为结构值赋值时。

任何人都知道这是为什么?

在我班的.h文件中我定义了结构和属性

@interface MyClass : UIView

{
    struct customStruct {
        float a;
        float b;
        float c;
    };

}

@property (assign, nonatomic) struct customStruct myStruct;
从超级视图

我尝试分配一个值,然后收到错误:" Expression not assignable"

object.myStruct.a = someValue;

4 个答案:

答案 0 :(得分:20)

试试这个:

struct customStruct aStruct = object.myStruct;
aStruct.a = someValue;
object.myStruct = aStruct

完全相同的情况是无法做到这一点:

view.frame.size.width = aWidthValue;

BTW在类接口中声明一个struct似乎是一个非常糟糕的样式。这更清洁:

typedef struct { 
    float a;
    float b;
    float c;
} customStruct;

@interface MyClass : UIView

@property (assign, nonatomic) customStruct myStruct;

答案 1 :(得分:6)

这是因为object.myStruct会返回您的结构成员的副本,并且没有必要更改该副本的成员a

你应该让整个struct更改成员,然后再次设置struct成员(使用get / set合成方法)

答案 2 :(得分:2)

interface范围之外/之前定义它:

struct LevelPath{
    int theme;
    int level;
};

//here goes your interface line
@interface BNGameViewController : UIViewController{
}
//create propertee here
@property (nonatomic, assign) struct LevelPath levelPath;

答案 3 :(得分:1)

要添加之前的建议,我建议不要将结构存储为属性,而是存储成员变量。 E.g:

@interface MyClass () {

    CGPoint myPoint;

}

然后在您的班级中,您可以直接为该结构分配新值:

myPoint.x = 100.0;

而不是@property,它是只读的:

myPoint = CGPointMake(100.0, myPoint.y);

鉴于这不是一个NSObject子类,除非你覆盖了getter / setter方法,否则我不会再看到它成为@property的目的,因为这对ARC来说非常有用与对象的内存管理。但如果我在这一点上错了(哎哟),请纠正我。

相关问题