我是Objective C编程的新手,只需要检查我将如何实现我在Mac Developer Library中找到的东西。 例如,我在Mac Developer Library中找到了这段代码:
- (BOOL)containsObject:(id)anObject
我需要执行此方法的步骤吗?
在.h文件中添加
-(BOOL)containsObject:(id)anObject;
然后在.m文件中实现它;
- (BOOL)containsObject:(id)anObject
{
//What do I place here to search my array with the objects?
return YES;
}
有人可以帮我一个例子,我会如何搜索一组数字并使用这种方法吗?
这是我的阵列:
NSArray *first;
first = [NSArray arrayWithObjects:1,2,3,4,5, nil];
答案 0 :(得分:1)
关于第一个问题,你可以做到这一点。为您提供更好的视觉理解的一个例子是:
YourClassName.h
#import <Foundation/Foundation.h>
@interface YourClassName : Subclass //replace subclass with something like NSObject or whatever you need
{
}
- (BOOL)containsObject:(id)anObject;
@end
和...
YourClassName.m
#import "YourClassName.h"
@implementation YourClassName
- (BOOL)containsObject:(id)anObject
{
//Insert function body here
}
@end
至于你的第二个问题,我对使用NSArray或使用这个奇怪的功能加载它并不是很熟悉。我的建议是使用(NSArray)anObject而不是(id)anObject,因为您可以将数组直接加载到函数中并在那里创建搜索参数。我不确定你在containsObject中究竟找到了什么对象。你看到它是否包含这个数字?如果值包含数组?指出一点,我可以为你找到一个更好的答案
修改强>
我想到你可能只是在寻找数组内部的数字,因为你是Objective-C的新手。要完成你想要的,你有几个选择。两者都需要改变你的功能。第一个就是将功能改为:
- (BOOL)containsObject:(int)object fromArray:(int*)array length:(int)length;
在YourClassName.h中。现在,您始终可以将参数更改为不同的数据类型,但这适用于整数。您也可以在没有长度参数的情况下执行此操作,但我认为它为我们节省了一些代码(个人偏好)。在.m文件中:
- (BOOL)containsObject;(int)object fromArray:(int*)array length:(int)length
{
for(int i = 0; i <= length; i++)
{
if (array[i] == object)
{
return YES;
}
}
return NO;
}
第二个是没有长度选项和更多代码
答案 1 :(得分:1)
您的意思是“实施” - 如编写您自己的版本 - 或“使用”?你好像从前者开始,以后者结束......
你如何使用它?以你的榜样为例,纠正:
NSArray *first = [NSArray arrayWithObjects:@1, @2, @3, @4,@ 5, nil];
@1
等是创建NSNumber
对象的简写 - 您只能将对象引用而不是原始值放入NSArray
。简写有效地扩展到[NSNumber numberWithInt:1]
等。
现在使用containsObject:
:
BOOL containsTheAnswerToEverything = [first containsObject:@42];
如果数组包含代表42的BOOL
和其他YES
,则会将NSNumber
变量设置为NO
。
你如何实现它?您可以在一个循环中检查数组的每个元素,将每个元素与您要查找的对象进行比较,您将在C中使用相同的算法(您似乎知道)。
如果你问如何定义一个类,那么你应该阅读Objective-C,但你的第2点是正确的大纲。
HTH