无法在IF语句中调用BOOL方法

时间:2014-10-17 23:33:20

标签: ios objective-c

我是Objective-C的新手,这个Smalltalk语法对于一个新来者来说非常令人沮丧。我试图在IF语句中调用以下方法声明:

-(BOOL) string:(NSString *)string1 containsCharInString:(NSString *)string2

当打电话给我时,我这样做,我认为应该这样做:

if([string1 containsCharInString: word2]) {...}

1。自动完成功能甚至不会将此视为我班级的一种方法 2.尝试调用时出现以下错误:

No visible @interface for NSString declares the selector 'containsCharInString'.

3 个答案:

答案 0 :(得分:3)

调用此方法

-(BOOL) string:(NSString *)string1 containsCharInString:(NSString *)string2
你会说

[someObject string:someString containsCharInString:someOtherString]
你知道吗?

我不知道someObject的类,因为我不知道你定义该方法的类。但我想告诉你的是每个参数都很重要。你不能只扔掉一个。

换句话说:没有选择器containsCharInString:,因为这不是您创建的方法的名称。您创建的方法称为string:containsCharInString:。这可能不是您想要创建的方法,但这是您创建的方法。

答案 1 :(得分:0)

您也可以这样做,而不是编写自己的方法。

NSString* aString = @"some string";

if ( [aString rangeOfString:@"different string"].location == NSNotFound )

答案 2 :(得分:0)

听起来像你正试图扩展NSString类的行为。

正如其他人所指出的,NSString已经有非常有效的方法,比如rangeOfCharacterFromSet来做到这一点。探索使用其中一种方法而不是编写自定义代码。如果您要反复进行,请创建一个NSCharacterSet对象并保存以供重用。

对于你的问题,关于打电话这样的工作:

if([string1 containsCharInString: word2]) {...}

这样做的一种方法是使string1成为一个自定义对象,可能是NSString的子类(对于初学者来说不是一个好主意 - NSString就是所谓的“类集群”,而这些对于子类来说很棘手)。

最简单的方法可能是创建一个NSString类别。类别是Objective-C的一个怪癖,它允许您在不对其进行子类化的情况下向现有类添加方法。类别无法添加实例变量,只能添加方法。

您的类别的界面可能如下所示:

@interface NSString(containsChar)

  • (BOOL)containsCharInString:(NSString *)string; @end

然后提供类别方法的实现。