我知道我不能用这个:
myView.frame.origin.x = 25.0;
Run Code Online (Sandbox Code Playgroud)
而我必须使用它:
CGRect myFrame = myView.frame;
myFrame.origin.x = 25.0;
myView.frame = myFrame;
Run Code Online (Sandbox Code Playgroud)
而且我一直这样做,但我不知道为什么我必须这样做.我想在我的理解中填补这个空白.谁能解释一下?
如今Xcode为您提供"表达式不可分配".前一段时间你得到一个编译错误"Lvalue需要作为赋值的左操作数".
我想更改变量值,它是另一个类的结构的成员.但价值并没有改变.
这是代码.
//Structure..
typedef struct {
int a;
double b;
} SomeType;
//Class which has the structure as member..
@interface Test2 : NSObject {
// Define some class which uses SomeType
SomeType member;
}
@property SomeType member;
@end
@implementation Test2
@synthesize member;
@end
//Tester file, here value is changed..
@implementation TesstAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
Test2 *t = [[Test2 alloc]init];
t.member.a = 10;
//After this the value still shows 0 …Run Code Online (Sandbox Code Playgroud) 我有一个带有标题的A类看起来像这样:
typedef struct {
int x;
int y;
} Position;
@interface ClassA : NSObject
@property Position currentPosition;
@end
Run Code Online (Sandbox Code Playgroud)
我尝试在另一个类中为属性分配位置结构的各个值,如下所示:
ClassA * classA = [ClassA new];
classA.currentPosition.x = 10;
Run Code Online (Sandbox Code Playgroud)
这给出了错误"表达式不可分配"并且不会编译.
我可以像这样设置:
ClassA * classA = [ClassA new];
Position position = {
.x = 1,
.y = 2
};
classA.currentPosition = position;
Run Code Online (Sandbox Code Playgroud)
我甚至可以改变position变量的各个"属性",如下所示:
ClassA * classA = [ClassA new];
Position position = {
.x = 1,
.y = 2
};
// WORKS
position.x = 4;
// DOESN'T WORK
// classA.currentPosition.x …Run Code Online (Sandbox Code Playgroud) 我在代码中做了很多这样的事情:
self.sliderOne.frame = CGRectMake(newX, 0, self.sliderOne.frame.size.width, self.sliderOne.frame.size.height);
Run Code Online (Sandbox Code Playgroud)
有什么方法可以避免这种繁琐的代码吗?我尝试过这种类型的东西:
self.sliderOne.frame.origin.x = newX;
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个Lvalue required as left operand of assignment错误.