0

I'm a totally new to Objective C programming and just need to check how would I implement something I find on the Mac Developer Library. For example I found this code in the Mac Developer Library:

- (BOOL)containsObject:(id)anObject

Are the steps I need to implement this method?

  1. in the .h file add

    -(BOOL)containsObject:(id)anObject;

then in the .m file implement it like this;

- (BOOL)containsObject:(id)anObject
{
   //What do I place here to search my array with the objects?
   return YES;
}

Can someone help me with an example how I would search an array of numbers and use this method?

This is my array:

NSArray *first;

first = [NSArray arrayWithObjects:1,2,3,4,5, nil];
4

2 回答 2

1

你的意思是“实现”——比如编写你自己的版本——还是“使用”?你似乎以前者开始,以后者结束......

你如何使用它?以你为例,更正:

NSArray *first = [NSArray arrayWithObjects:@1, @2, @3, @4,@ 5, nil];

@1etc. 是创建NSNumber 对象的简写- 您只能将对象引用而不是原始值放入NSArray. 速记有效地扩展到[NSNumber numberWithInt:1]等。

现在使用containsObject:

BOOL containsTheAnswerToEverything = [first containsObject:@42];

如果数组包含表示 42,则这会将BOOL变量设置为,否则。YESNSNumberNO

你如何实施它?您在循环中检查数组的每个元素,将每个元素与您正在寻找的对象进行比较,您将在 C 中使用相同的算法(您似乎知道)。

如果您要问如何定义一个类,那么您应该阅读 Objective-C,但您的第 2 点是正确的大纲。

高温高压

于 2013-09-05T02:51:52.643 回答
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;
}

第二个只是没有长度选项和更多代码

于 2013-09-05T02:26:25.510 回答