【发布时间】:2019-02-28 09:20:45
【问题描述】:
我正在尝试通过阅读“学习 Objective-C 2.0”来学习 Objective-C 的基础知识。有一个关于类别的练习,您要求通过使用类别向 NSString 添加方法。我的简单程序如下。它(应该)取一个字符串,然后颠倒单词的顺序。
主要
#import <Foundation/Foundation.h>
#import "CatNSString.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *test = @"Dog bites Man";
NSString *test1 = nil;
test1 = [test1 reverseWords: test];
NSLog(@"%@ : %@", test, test1);
}
return 0;
}
界面
#import <Foundation/Foundation.h>
@interface NSString (CatNSString)
- (NSString*) reverseWords:(NSString*)string;
@end
实施
#import "CatNSString.h"
@implementation NSString (CatNSString)
- (NSString*) reverseWords: (NSString*) string
{
NSString *stringReturn = nil;
NSArray *arrayString = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
stringReturn = [string stringByAppendingString:@"hello"];
for (NSString *word in arrayString)
{
NSString *stringTmp1 = word;
NSString *stringTmp2 = stringReturn;
stringReturn = [stringTmp1 stringByAppendingString:stringTmp2];
NSLog(@"stringTmp1: %@", stringTmp1);
}
return stringReturn;
}
@end
它可以编译,但程序的行为就像从未调用过该方法一样。如果我在方法中调用NSLog,则控制台没有输出。谁能看到我没有做而我应该做的事情?
【问题讨论】:
-
因为
test1是nil。您不要在该方法中使用self(或隐含地使用其实例方法或属性之一)。所以应该是一个类方法:- (NSString*) reverseWords:(NSString*)string;=>+(NSString*) reverseWords:(NSString*)string;,然后test1 = [test1 reverseWords: test];应该是test1 = [NSString reverseWords: test]; -
嗨 Larme,谢谢,我已经将该方法转换为类方法,然后再次尝试将 test1 初始化为除 nill 之外的其他方法。该方法被调用了两次。再次感谢您的宝贵时间。
标签: objective-c