Objective C - 类别无可见选择器 @removeWhiteSpaceStringWithString
Objective C - Category No Visible selector @removeWhiteSpaceStringWithString
所以我正在尝试使用 NSString
中的类别添加新的测试方法,但我必须通过以下步骤声明一些方法:
从 NSString
创建类别,名称为 StringExtension
所以它将是 NSString+StringExtension
,之后我声明了我自己的方法 return 类型是String
所以在 NSString+StringExtension
@interface
和 @implementation
中定义之后,我尝试在 viewController 中调用它,但首先我导入classNSString+StringExtension
之后我喜欢这个
NSString *testString = @"as d a s d";
NSLog(@"===== %@", [testString removeWhiteSpaceStringWithString:testString]);
它说
No visible @interface for 'NSString' declares the selector 'removeWhiteSpaceStringWithString:'
问题是,为什么不能这么用?我已经搜索并看到了这样做的教程,而且这是可能的,但为什么我不能那样做?
所以我找到了这个方法,但我不知道这个代码是否正确?
NSLog(@"===== %@", [[testString class] removeWhiteSpaceStringWithString:testString]);
有和我一样的情况吗?
根据您与我们分享的内容,您似乎定义了一个 class 方法(使用 +
)。它应该是一个实例方法(-
),然后你也不需要参数。您可以简单地参考 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
显然,在您的实现中做任何您想做的事,但它说明了您想要一个实例方法并且不需要再次将字符串作为参数传递的想法。
所以我正在尝试使用 NSString
中的类别添加新的测试方法,但我必须通过以下步骤声明一些方法:
从
NSString
创建类别,名称为StringExtension
所以它将是NSString+StringExtension
,之后我声明了我自己的方法 return 类型是String
所以在
NSString+StringExtension
@interface
和@implementation
中定义之后,我尝试在 viewController 中调用它,但首先我导入classNSString+StringExtension
之后我喜欢这个
NSString *testString = @"as d a s d"; NSLog(@"===== %@", [testString removeWhiteSpaceStringWithString:testString]);
它说
No visible @interface for 'NSString' declares the selector 'removeWhiteSpaceStringWithString:'
问题是,为什么不能这么用?我已经搜索并看到了这样做的教程,而且这是可能的,但为什么我不能那样做?
所以我找到了这个方法,但我不知道这个代码是否正确?
NSLog(@"===== %@", [[testString class] removeWhiteSpaceStringWithString:testString]);
有和我一样的情况吗?
根据您与我们分享的内容,您似乎定义了一个 class 方法(使用 +
)。它应该是一个实例方法(-
),然后你也不需要参数。您可以简单地参考 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
显然,在您的实现中做任何您想做的事,但它说明了您想要一个实例方法并且不需要再次将字符串作为参数传递的想法。