【问题标题】:Objective C - Category No Visible selector @removeWhiteSpaceStringWithString目标 C - 类别无可见选择器 @removeWhiteSpaceStringWithString
【发布时间】:2021-07-06 09:54:47
【问题描述】:

所以我尝试使用来自NSString 的类别添加新的测试方法,但我必须通过以下步骤声明如下:

  1. NSString 创建类别,名称为StringExtension,所以它将是NSString+StringExtension,之后我声明了我自己的方法,返回类型为String

  2. 所以在我定义NSString+StringExtension @interface@implementation 之后,我尝试在我的viewController 中调用它,但首先我导入了NSString+StringExtension

  3. 之后我就喜欢这个

    NSString *testString = @"as d a s d";
    NSLog(@"===== %@", [testString removeWhiteSpaceStringWithString:testString]);
    
  4. 它说

    “NSString”没有可见的@interface 声明选择器“removeWhiteSpaceStringWithString:”

问题是,为什么不能这样使用?我已经搜索并看到了这样的教程,并且可能,但为什么我不能这样做?

所以我找到了这种方式,但我不知道这是使用正确的代码吗?

NSLog(@"===== %@", [[testString class] removeWhiteSpaceStringWithString:testString]);

有没有人和我一样的情况?

【问题讨论】:

  • 你能把代码贴在你的 NSString+StringExtension.h 文件中吗?

标签: objective-c nsstring objective-c-category


【解决方案1】:

根据您与我们分享的内容,您似乎定义了一个类方法(使用+)。它应该是一个实例方法(带有-),然后您也不需要该参数。您可以简单地引用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

显然,在实现中做任何你想做的事情,但它说明了你想要一个实例方法并且不需要再次将字符串作为参数传递的想法。

【讨论】:

  • 嗨@rob,很好!我不知道为什么我用(+)声明它,它解决了我的问题!非常感谢您的解决方案和解释。之前很迷茫。祝福你!
  • 是的,扩展可以包括类和实例方法。也许您开始的示例是一个类方法。但在这种情况下,实例方法更有意义。祝你好运,编码愉快
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多