我刚刚开始使用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";
说“预期;合成后”
为什么我不能将其设置为字符串?
答案 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开始。