为什么我不能将它设置为字符串?
我刚刚开始使用obj-c,并创建了2个文件,一个.h和一个.m文件。 .h文件是..为什么我不能将它设置为字符串?
#import <Foundation/Foundation.h>
@interface CardUnit : NSObject
{
@property (assign) NSString *name;
@property (assign) NSString *gold;
@end
与.m文件
#import "CardUnit.h"
@implementation CardUnit
@synthesize gold = @"gold";
@synthesize name = _name;
@end
但它给我一个错误的
@synthesize gold = @"gold";
说 “预期;合成后”
为什么我不能将它设置为字符串?
@synthesize
不用于给变量赋值,而是用于为变量定义基本getter和setter的简写。该
@synthesize var = _var
语法常说,“我想你使用实例变量_var
作为内部变量的属性var
”。
如果您想将默认字符串赋值给一个属性,把它放在你的init
方法:
-(id)initWithName:(NSString*)name
{
self = [super init];
if(self)
{
self.gold = @"gold";
self.name = name
}
return self;
}
或者你也可以在吸气设定的默认值(每@马里奥的评论波纹管):
-(NSString*)gold
{
_gold ? return _gold : return @"gold";
}
您不能在@synthesize声明中分配一个值。
@synthesize是一个为变量设置getter和setter的声明。而不是分配值。
你应该稍后再做一个方法,将值设置为你的“黄金”变种。
我是AS3开发者,所以我习惯于能够在方法外设置我的变量,你不能在obj-c中做到这一点吗? – Phil 2012-07-08 15:31:06
@Phil:'黄金= @“黄金”;'工作,只是不使用合成。 – C0deH4cker 2012-07-08 15:32:15
@Phil不,Objective-C ivars在创建时始终设置为0。除代码外,您不能将它们设置为默认值。你通常在你的类的'-init'方法中设置默认值。另外,如果你不使用ARC和'strong'或'copy',那么你应该真的让你的属性'保留'或'复制'。 'assign'会导致对象的内存问题。 – 2012-07-08 15:39:19
您不假设将值设置为合成中的变量。它们仅用于综合访问器方法。
您得到synthesize
错误。它不用于赋值,它用于在你不提供它们的情况下生成默认的setter/getter方法。您可以使用property = ivar
指定哪个ivar应该用于该属性,但常数值不是ivar。所以你不能以这种方式分配字符串值。详情请查看The Obj-C Programming Language (Property Implementation Directives)。
@synthesize
为属性生成一个getter和setter,但编译器负责生成这些属性。
我认为这是一个好主意,阅读iOS开发的好教程,也许从Apple Developer连接网站上的Start developing iOS apps today开始。
接口声明中的开头大括号('{')也是无与伦比的,但如果没有ivars,则不需要大括号。只是fyi。 – chown 2012-07-08 15:33:50