block 的使用

前言

  • ReturnType:你所想要返回的数据类型;
  • ParameterType:你所要传递的参数类型;
  • parameterName:你所要传递的参数名;
  • blockName:你所构造的 block 名。

(另外参数可以传入多个)

作为变量

ReturnType (^blockName)(ParameterType) = ^ReturnType (ParameterType parameterName) {
    // Your code here...
};

作为属性

@property (copy) ReturnType (^blockName) (ParameterType);

作为方法定义参数

- (void)yourMethod:(ReturnType (^)(ParameterType))blockName;

作为方法传入参数

[someObject doSomethingWithBlock: ^ReturnType (ParameterType parameterName) {
    // Your code here...
}];

匿名 Block

^ReturnType (ParameterType parameterName) {
    // Your code here...
};

使用 typedef

typedef ReturnType (^blockName)(ParameterType);

内联 Block

^ReturnType (ParameterType parameterName) {
    // Your code here...
}(parameterValue);

递归 Block

__block ReturnType (^blockName)(ParameterType) = [^ReturnType (ParameterType parameterName) {
    if (returnCondition) {
        blockName = nil;
        return;
    }

    // Your code here...
} copy];
blockName(parameterValue);

作为返回值

- (ReturnType(^)(ParameterType))methodName {
    // Your code here...
}

在 swift 中(闭包)

var blockName = { (parameterName: ParameterType) -> ReturnType in
    return returnValue;
}