我是Objective-C的新手,我正在尝试确定传递给my方法的NSString是否与之前传递给同一方法的NSString相同。
有一种简单的方法吗?
答案 0 :(得分:2)
将字符串存储为类的实例变量,每次调用该方法时,比较实例并替换为新参数。
答案 1 :(得分:2)
如果您希望在每个班级实例(而不是全局)中执行此操作:
@interface MyClass : NSObject
- (void)myMethod:(NSString *)value;
@end
@interface MyClass ()
@property (copy, nonatomic) NSString *value;
@end
@implementation MyClass
- (void)myMethod:(NSString *)value
{
if ([self.value isEqualToString:value])
{
// Values are the same!
}
else
{
self.value = value;
}
}
@end
答案 2 :(得分:0)
只是详细说明@Wain说的话:
添加实例变量:
@interface ViewController ()
{
NSString * lastString;
}
然后在你的方法中:
- (void) methodWithString:(NSString *)string {
if ([string isEqualToString:lastString]) {
NSLog(@"Same String");
}
else {
NSLog(@"New String");
lastString = string;
}
}
答案 3 :(得分:0)
主题的变体大多数答案如下:如果您希望对您的类每个实例执行此操作,那么您可以使用实例变量。但是,由于这是特定于您的方法的内容,因此您不希望在任何接口中声明此变量,并且最近的编译器通过在实现中启用实例变量声明来帮助您。例如:
@implementation MyClass
{
NSString *methodWithString_lastArgument_; // make it use clear
}
- (void) methodWithString:(NSString *)string
{
if ([string isEqualToString:methodWithString_lastArgument_])
{
// same argument as last time
...
}
else
{
// different argument
isEqualToString:methodWithString_lastArgument_ = string.copy; // save for next time
...
}
}
(以上假设为ARC。)
string.copy
是[string copy]
的简写,可以处理可变字符串 - 如果方法传递NSMutableString
,那么这将复制其值为(不可变)NSString
。这可以保护方法免受调用之间可变字符串更改值的影响。
如果要在全局的基础上而不是按实例执行此操作,可以在方法中声明static
变量,从而将其完全隐藏在方法之外:< / p>
- (void) methodWithString:(NSString *)string
{
static NSString *lastArgument = nil; // declare and init private variable
if ([string isEqualToString:lastArgument])
{
// same argument as last time
...
}
else
{
// different argument
isEqualToString:lastArgument = string.copy; // save for next time
...
}
}
HTH