block 的使用

前言

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

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

作为变量

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

作为属性

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

作为方法定义参数

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

作为方法传入参数

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

匿名 Block

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

使用 typedef

1
typedef ReturnType (^blockName)(ParameterType);

内联 Block

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

递归 Block

1
2
3
4
5
6
7
8
9
__block ReturnType (^blockName)(ParameterType) = [^ReturnType (ParameterType parameterName) {
if (returnCondition) {
blockName = nil;
return;
}

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

作为返回值

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

在 swift 中(闭包)

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