3

我想将另一个 NSArray 作为参数传递给完成块方法,因为我是这个概念的新手,我不明白该怎么做。目前我只传递一个数组,但现在我想传递第二个 nsarray,在第二个数组中,我想传递带有值的数组,以便我可以在那里使用

typedef void(^completion)(NSArray *list);
 -(void) getMoreData:(completion) completion 

调用方法

[Magento.service getMoreData:^(NSArray *list ) {
        if(list){
                 }

在上面的方法中我想传递 NSArray,这个方法在不同的类中,我从不同的类中调用。此数组在此方法中使用。

4

2 回答 2

4

你可以把它当作一个 C 函数来调用,例如,我声明了一个新的类MyClass。接口文件内容为:

typedef void(^completion)(NSArray *list);

@interface MyClass : NSObject

- (void)getMoreData:(completion)completionBlock;

@end

并在实施中

- (void)getMoreData:(completion)completionBlock
{
    // fullfil your array
    NSArray *array = @[@1, @2, @3];

    // call the completion block
    completionBlock(array);
}

我使用它如下:

MyClass *myClassInstance = [[MyClass alloc] init];
[myClassInstance getMoreData:^(NSArray *list) {
    if (list) {
        NSLog(@"%@", list);
    } else {
        NSLog(@"Nil array");
    }
}];

输出是:

2013-05-09 16:29:00.676 Test[823:11303] (
    1,
    2,
    3
)
于 2013-05-09T14:32:58.547 回答
0

将数组传递给完成块不是您的责任。在您描述的情况下,调用完成块的是 getMoreData ,因此该方法将数组传递给块。

- (void) getMoreData: (completion) completion
{
    ...some code...
    NSArray *array = [[NSArray alloc] init];
    if(completion)
        completion(array);

    ...some code...
}

您的职责只是传递一个完成块,该块将使用在 getMoreData 方法中创建的数组。

于 2013-05-09T14:32:36.060 回答