6

可以说,我正在尝试使用结构将三个值存储为一个单元。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

4 回答 4

20

试试这个:

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

这与不能这样做的情况完全相同:

view.frame.size.width = aWidthValue;

顺便说一句,在类接口中声明结构似乎是一种非常糟糕的风格。这更清洁:

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

@interface MyClass : UIView

@property (assign, nonatomic) customStruct myStruct;
于 2013-03-07T13:13:23.423 回答
6

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

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

于 2013-03-07T13:12:28.950 回答
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;
于 2013-03-07T13:12:51.490 回答
1

为了补充前面的建议,我建议不要将您的结构存储为属性,而是存储为成员变量。例如:

@interface MyClass () {

    CGPoint myPoint;

}

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

myPoint.x = 100.0;

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

myPoint = CGPointMake(100.0, myPoint.y);

鉴于这不是 NSObject 子类,除非您要覆盖 getter/setter 方法,否则我看不到将其变为一个的目的@property,因为这对于 ARC 帮助您的对象的内存管理非常有用。但是,如果我在这一点上错了,请纠正我(哎哟)。

于 2014-02-06T18:05:39.060 回答