美文网首页
Block(一)

Block(一)

作者: 帽子和五朵玫瑰 | 来源:发表于2018-05-18 18:14 被阅读0次

    Block专题

    Block对象是一段代码如:

            ^{
                NSLog(@"这里是一个Block");
            };
    

    在一个花括号内有一套指令。但是没有函数名,只有一个表示这段代码是一个Block对象

            ^(double dividend,double divisor){
                double q = dividend/divisor;
                return q;
            };
    

    这个Block对象有两个实参,一个返回值。

    Block对象可以被当成一个实参来传递给可以接收Block的方法,很多苹果的类都有可以接受Block为实参的方法。

    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // insert code here...
            NSArray *originalString = @[@"SaueKraut",@"Raygun",@"Big Nerd Ranch",@"Mississippi"];
            NSLog(@"original string: %@",originalString);
            NSMutableArray *devowelizedString = [NSMutableArray array];
            NSArray *vowels = @[@"a",@"e",@"i",@"o",@"u"];
            void (^devowelizer)(id,NSUInteger,BOOL *);
            devowelizer = ^(id string,NSUInteger i,BOOL *stop){
                NSMutableString *newString = [NSMutableString stringWithString:string];
                for(NSString *s in vowels){
                    NSRange fullRange = NSMakeRange(0, [newString length]);
                    [newString replaceOccurrencesOfString:s
                                               withString:@""
                                                  options:NSCaseInsensitiveSearch
                                                    range:fullRange];
                }
                [devowelizedString addObject:newString];
            };
            [originalString enumerateObjectsUsingBlock:devowelizer];
            NSLog(@"这里%@", devowelizedString);
        }
        return 0;
    }
    

    enumerateObjectsUsingBlock:方法要求传入的Block对象的三个实参类型都是固定的。第一个实参是对象指针,指向当前(枚举)的对象。该指针的类型是id,所以无论数组包含的是什么类型的对象,都可以将地址赋给指针。第二个实参的类型是NSUInteger,其值是当前对象在数组中的索引。第三个实参是指向BOOL变量的指针,该变量的默认值是NO。如果将该值设为YES,那么数组对象会在执行完当前的Block对象后终止枚举过程

    相关文章

      网友评论

          本文标题:Block(一)

          本文链接:https://www.haomeiwen.com/subject/eoqndftx.html