0

说我有像下面这样的课

@interface Restaurant : NSObject
    @property (nonatomic,strong) NSString *restaurantID;
    @property (nonatomic,strong) NSString *restaurantName;
    @property (nonatomic,strong) NSString *restaurantAddress;

@end

如果我正在创建一个“餐厅”对象,请说“休息”,并且我可以访问诸如 rest.restaurantID 等属性。

我的问题是,如果我正在分配对象,我如何访问属性。像这样的东西

Restaurant *rest = [[Restaurant alloc]init];
[rest setRestaurantName:@"MCD"]; 

id proxyObject;
proxyObject = rest;

如何使用 proxyObject 而不是 rest 访问属性“restaurantName”?

谢谢

4

2 回答 2

1

Objective-C 中有很多方法,你可以简单地将代理对象转换回 Restaurant 实例

id proxyObject;
proxyObject = rest;
[(Restaurant)proxyObject restaurantName];

或者您可以使用键/值编码:

[proxyObject valueForKey:@"restaurantName"];

另一种方法是声明一个协议,声明餐厅名称,然后在餐厅类中实现该协议,之后您可以使用该协议的实例直接调用它的 getter restaurantName

于 2013-08-08T10:31:20.653 回答
0

通过使用id动态类型,您无法使用 dotSyntax 访问属性,但是您可以使用自动生成的访问器方法。如果你有一个名为 var 的 @property,你可以使用 getter

- (id) var;

和二传手

- setVar:(id)var;

在你的情况下,你可以像这样编码

[proxyObject setRestaurantId:@"anID"] // setter
NSString * restId = [proxyObject restaurantID]; //getter

对于每个@property,依此类推。

(看看 getter 是如何完全是您的属性的名称以及 setter 名称如何以 set 开头,然后是您的属性名称以大写字母开头)

于 2013-08-08T10:38:12.443 回答