Objective c NSString的Setter
我对Objective-C非常陌生,正在尝试一个简单的xcode项目。作为这个项目的一部分,我实现了一个新类来存储数据。它应该允许访问许多类变量。.h文件只是声明了下面的方法。.m文件包含以下内容。问题是xcode给出了一个警告,即“setNameString:“for assignment to property”没有setter方法。我找不到一个不涉及“[nameString1发行版];”的setter因为我使用的是弧,所以我不能用它来清除字符串。我知道setter方法不完整,但我想在填写其余内容之前了解这个问题Objective c NSString的Setter,objective-c,nsstring,Objective C,Nsstring,我对Objective-C非常陌生,正在尝试一个简单的xcode项目。作为这个项目的一部分,我实现了一个新类来存储数据。它应该允许访问许多类变量。.h文件只是声明了下面的方法。.m文件包含以下内容。问题是xcode给出了一个警告,即“setNameString:“for assignment to property”没有setter方法。我找不到一个不涉及“[nameString1发行版];”的setter因为我使用的是弧,所以我不能用它来清除字符串。我知道setter方法不完整,但我想在填写其
@interface data_storage ()
{
}
+ (NSString *) nameString1;
+ (NSString *) nameString2;
+ (NSString *) nameString3;
+ (NSString *) nameString4;
+ (NSString *) nameString5;
+ (NSString *) nameString6;
@end
@implementation data_storage
+ (NSString *) getter : (int)stringNumber {
switch (stringNumber) {
case 1:
return data_storage.nameString1;
case 2:
return data_storage.nameString2;
case 3:
return data_storage.nameString3;
case 4:
return data_storage.nameString4;
case 5:
return data_storage.nameString5;
case 6:
return data_storage.nameString6;
default:
return nil;
}
}
+ (void) setter:(int)stringNumber string:(NSString *)nameString {
switch (stringNumber) {
case 1:
data_storage.nameString1 = nameString;
break;
case 2:
data_storage.nameString2 = nameString;
break;
default:
break;
}
}
@end
嗯,嗯。很有趣,你想在这里做什么。你来自哪种编程语言 您特别看到的错误是,“setNameString1”没有setter方法,这是因为名为nameString1的变量没有setter。事实上,没有称为nameString1的属性或IVAR,这是一个更大的问题 执行此操作时:
+(NSString*)nameString1代码>您实际上并没有声明变量;您正在声明一个类方法。要声明一个类变量,我见过的常用Objective-C技术是使用一个静态变量,即lastatic NSString*classString=@“这是一个类级别的字符串变量!”代码>这就是我一直在做类级变量的方式,在我需要做的极少数情况下,其他人似乎也这样做。正如他在链接中所说,Objective-C实际上没有类级变量的概念
现在,只要声明这个“类变量”,就可以为它创建一个getter和setter,这就是类级方法的用武之地。我想会是这样的:
+ (NSString *)classString {
return classString;
}
+ (void)setClassString:(NSString *)newString {
classString = newString;
}
在那里,你有类级别的getter和setter!现在,您可能还想在setter方法中执行classString=[newString copy]
,实际上,我不确定ARC是如何处理这类事情的,但我认为您的内存管理都将为您处理
现在,这能说明一些事情吗
更进一步,你有这些…交换setter和getter,它们接受int参数。那么,现在你在这些方法中做什么?您正在执行返回数据\u storage.nameString1代码>或数据存储.nameString1=nameString代码>,它们本身就是getter和setter。请记住:
返回数据存储名称字符串1
==返回[数据存储名称字符串1]
和
data\u storage.nameString1=nameString
=[dataStorage setNameString1:nameString]
dot语法非常简洁,它在幕后调用方法。现在再看看你的类——你有每个类的方法定义吗?您不需要,这就是您的“setNameString1'的无setter方法”错误的来源
好吧,现在,抛开这些,我想你应该重新考虑一下你是怎么做的。你想完成什么?您想要一个包含某种数据的对象,并且您认为您想要一个类,因为您只希望这些对象中的一个存在?在这种情况下,您应该使用单例!是一个很好的示例代码,
这是一个教程,你可以使用谷歌查找更多信息。如果需要澄清,请告诉我。在尝试编写更多Objective-C之前,您需要阅读更多内容。尤其是,请阅读“属性”。使用“属性”,您可以让编译器为您生成getter和setter(还要了解,您在上面定义类方法(+
前缀),并且它们本身没有访问类对象中任何数据的权限。)投票关闭,因为这不会导致任何结果。。。