【发布时间】:2015-08-09 13:59:46
【问题描述】:
我刚刚开始使用 Obj-C。然而,由于我的背景是 Python,我仍然在为一些概念和语法而苦恼。我确信 ObjC 有处理这个问题的机制(选择器?),但我还没有走那么远,我希望向你学习。
考虑这个类:
@interface Drink : NSObject
@property NSString *drinkName;
@property NSDictionary *drinkIngredients;
@property (weak) Drink *similarDrinks;
@end
similarDrinks 属性将链接到相同类型的其他对象(我打算做对象列表但决定保持简单,因此是复数)。
然后我的主文件包含以下代码:
Drink *margharita = [[Drink alloc] init];
margharita.drinkName = @"Margharita";
margharita.drinkIngredients = @{
@"Fresh Lime Juice" : @22,
@"Contreau" : @30,
@"Blanco Tequila" : @45,
};
然后有更多这样的对象,最后我创建strawberryMargharita对象:
Drink *strawberryMargharita = [[Drink alloc] init];
strawberryMargharita.drinkName = @"Strawberry Margharita";
strawberryMargharita.drinkIngredients = @{
@"Fresh Lime Juice" : @20,
@"Contreau" : @30,
@"Blanco Tequila" : @45,
@"Strawberry Puree" : @40
};
strawberryMargharita.similarDrinks = margharita;
注意属性strawberryMargharita.similarDrinks = margharita; 在这里有效,因为它是之前定义的。如果对象margharita 可以指向这个对象-> margharita = strawberryMargharita.similarDrinks;,那就太好了。我认为这应该是可能的,因为 ObjC 编译器是动态的吧?
还有一些人可能会指出我的数据结构并不完全适合这个,也许还有其他聪明的方法来实现它,但我想知道如何做到这一点,因为我想学习如何分配未声明的对象。整个 Xcode 项目在 Github 上,带有 main.m、drink.m 和 drink.h 文件。
【问题讨论】:
-
“因为 ObjC 编译器是动态的”——这是什么意思?除了另一个评估(
margharita.similarDrinks = strawberryMargharita;)之外,这需要什么样的特殊“活力”? -
您可以在重写的
[Drink init]方法中执行这些操作,就像在 Python 对象构造函数方法(以及几乎所有语言)中一样。 -
@TheParamagneticCroissant 我试过了,我得到了
Use of undeclared identifierstrawberryMargharita` -
@trojanfoe 你介意给我看一下代码吗?谢谢
-
@user3056783 显然,您需要将分配移动到
strawberryMargharita已经存在的位置。例如,紧接在其他分配之后或之前。
标签: objective-c oop undeclared-identifier