为什么我不能将它设置为字符串?

时间:2012-07-08 15:20:43

标签: objective-c

我刚刚开始使用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";

说“预期;合成后”

为什么我不能将其设置为字符串?

5 个答案:

答案 0 :(得分:2)

你错了synthesize。它不是用于赋值,而是用于生成默认的setter / getter方法,以防您不提供它们。您可以使用property = ivar指定应该为属性使用哪个ivar,但是常量值不是ivar。所以你不能以这种方式分配字符串值。请查看The Obj-C Programming Language (Property Implementation Directives)了解详细信息。

答案 1 :(得分:2)

@synthesize不用于为变量赋值,而是用于定义变量的基本getter和setter的简写。在

@synthesize var = _var

语法用于说,&#34;我希望您使用实例变量_var作为属性var&#34;的内部变量。

如果要为属性分配默认字符串,请将其放在init方法中:

-(id)initWithName:(NSString*)name
{
  self = [super init];
  if(self)
  {
    self.gold = @"gold";
    self.name = name
  }
  return self;
}

或者您可以在getter中设置默认值(根据@ Mario的评论):

-(NSString*)gold 
{
  _gold ? return _gold : return @"gold";
}

答案 2 :(得分:0)

您无法在@synthesize声明中指定值。

@synthesize是一个为变量设置getter和setter的声明。它不是用于分配值。

您应该稍后使用将值设置为“gold”var。

的方法

答案 3 :(得分:0)

您不应该在合成中为变量设置值。它们仅用于合成访问器方法。

答案 4 :(得分:0)

@synthesize为属性生成一个getter和setter,但编译器负责生成这些。

我认为阅读关于iOS开发的好教程是个好主意,可能从Apple Developer连接网站上的Start developing iOS apps today开始。