我是否必须在Objective C中使用点表示法来访问结构值?

Bru*_*ean 2 syntax objective-c

我一直在寻找这个简单问题的答案,没有运气.所以这里是:是否可以在不使用点符号的情况下访问Objective-C中的Object的结构值,即仅使用规范的消息语法?例如,假设我们有一个为粒子对象定义的CGPoint实例变量position!

//Particle.h
@interface Particle : NSObject {
CGPoint position
}
@property CGPoint position;
@end
Run Code Online (Sandbox Code Playgroud)

和相应的实现:

//Particle.m
#import "Particle.h"
@implementation Particle
@synthesize position;
@end
Run Code Online (Sandbox Code Playgroud)

并假设在其他*.m文件(比如AppController.m)中我们有:

a_particle = [Particle alloc];
[a_particle setPosition:CGPointMake(x_val,y_val)];
Run Code Online (Sandbox Code Playgroud)

那为什么我们不能使用:

[[a_particle position] x];
Run Code Online (Sandbox Code Playgroud)

得到x_val而不是:

a_paticle.position.x;
Run Code Online (Sandbox Code Playgroud)

注意到后者工作正常?另请注意

[a_particle position].x;
Run Code Online (Sandbox Code Playgroud)

会工作,但我试图用点符号避免混乱.我的预感是结构实例变量必须使用点表示法来访问它的值(在这种情况下是x_val和y_val),这是真的吗?

Fre*_*ung 6

A CGPoint只是一个普通的旧C struct,而不是一个Objective-c类,因此您无法向其发送消息.您需要使用C的语法来读取struct成员,即'.'


Jas*_*oco 5

结构来自C,因此必须使用传统的C方法进行访问.您可以使用.或使用取消引用它们来访问结构的字段->,这是唯一的方法.传递消息是Objective-C的事情并没有真正意义,因为它们实际上并不是Objective-C对象.