问题描述
所以我试图添加新方法来使用 Nsstring
中的类别进行测试,但我必须通过以下步骤声明如下:
-
从
Nsstring
创建类别,名称为StringExtension
所以它将是Nsstring+StringExtension
,之后我声明了我自己的返回类型为String
的方法 所以在我定义
Nsstring+StringExtension
@interface
和@implementation
之后,我尝试在我的 viewController 中调用它,但首先我导入类Nsstring+StringExtension
>-
之后我就喜欢这个
Nsstring *testString = @"as d a s d"; NSLog(@"===== %@",[testString removeWhiteSpaceStringWithString:testString]);
-
它说
没有可见的@interface for 'Nsstring' 声明了选择器 'removeWhiteSpaceStringWithString:'
问题是,为什么它不能那样使用?我已经搜索并看到了这样的教程并且它是可能的,但是为什么我不能这样做?
所以我找到了这种方式,但我不知道这是要使用的正确代码吗?
NSLog(@"===== %@",[[testString class] removeWhiteSpaceStringWithString:testString]);
有和我一样的情况吗?
解决方法
根据您与我们分享的内容,您似乎定义了一个类方法(使用 +
)。它应该是一个实例方法(带有 -
),然后你也不需要参数。您可以简单地引用 self
。
例如:
// NSString+Whitespace.h
@import Foundation;
NS_ASSUME_NONNULL_BEGIN
@interface NSString (Whitespace)
- (NSString *)stringByRemovingWhitespace;
@end
NS_ASSUME_NONNULL_END
和
// NSString+Whitespace.m
#import "NSString+Whitespace.h"
@implementation NSString (Whitespace)
- (NSString *)stringByRemovingWhitespace {
return [self stringByReplacingOccurrencesOfString:@"\\s+"
withString:@""
options:NSRegularExpressionSearch
range:NSMakeRange(0,self.length)];
}
@end
然后你可以这样做:
NSString *testString = @"as d a s d";
NSLog(@"===== %@",[testString stringByRemovingWhitespace]); // ===== asdasd
显然,在您的实现中做任何您想做的事情,但它说明了一个想法,即您需要一个实例方法并且您不需要再次将字符串作为参数传递。