我是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'.
答案 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)
然后提供类别方法的实现。