我正在尝试使用结构来存储三个值作为一个单元。我收到了一个错误:" 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;
答案 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来说非常有用与对象的内存管理。但如果我在这一点上错了(哎哟),请纠正我。