gpt4 book ai didi

ios - Objective-C 结构定义和修改给出错误 'Expression not assignable'?

转载 作者:可可西里 更新时间:2023-11-01 06:22:57 25 4
gpt4 key购买 nike

我一直在阅读其他类似的问题,但这些解决方案要么不适合,要么无法解决我手头的问题。我的代码其实很简单,我不知道我应该怎么做我想做的。好的:

在 .h 文件中我有:

struct MyState{
float quantizer;
BOOL isOpen;
};

@interface ... {
...
struct MyState myState;
}

@property (nonatomic,assign) struct MyState myState;

在 .m 文件中,我写入和读取如下:

@synthesize myState

...
self.myState.isOpen = TRUE;
if(self.myState.isOpen)
self.myState.quantizer = myQuantizerValue;

现在,XCode 将不接受使用“.”进行访问。运算符(operator)。它说“表达式不可分配”。我尝试将 myState 更改为指针并将我的读/写转换为用户“->”运算符,例如:

self.myState->isOpen = TRUE;

然后它会在赋值时给出一个运行时错误。我应该怎么做才能以简单的方式访问和修改这些属性?我想使用结构构造函数只是为了避免为 MyStruct 中的每个属性声明和合成单独的变量。

最佳答案

这与您不能分配给 View 的 frame 属性的 size 的原因相同。这是 Objective-C 的一个限制。请参阅 this section of my book 末尾对此问题的讨论.正如我在那里解释的那样,您必须将结构属性值提取到变量中,更改结构的成员,然后重新分配给属性:

struct MyState s = self.myState;
s.isOpen = YES;
self.myState = s;

基本上这是因为 self.myState 中的“点”与 myState.isOpen 中的“点”完全不同。第一个是对 myState 方法 的 Objective-C 调用,并返回一个结构。第二个是对结构成员的 C 访问。

另一种方法是首先不使用 Objective-C 属性:直接访问实例变量:

self->myState.isOpen = YES;

但是当然你不能在不公开这个实例变量的情况下从其他类中做到这一点......

关于ios - Objective-C 结构定义和修改给出错误 'Expression not assignable'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com