shu*_*hra 24 block objective-c ios completionhandler swift
我当我在使用它们既完成处理并阻止混乱Swift
和Objective-C
.当我Swift
在谷歌搜索块时,它显示完成处理程序的结果!有人能告诉我什么是相对于完成处理器和块之间的差异Swift
和Objective-C
?
vai*_*hav 32
在这里,您可以轻松区分块和完成处理程序,实际上两个块都是块,请参见下面的详细信息.
块:
块是添加到C,Objective-C和C++的语言级功能,它允许您创建不同的代码段,这些代码段可以传递给方法或函数,就像它们是值一样.块是Objective-C对象,这意味着它们可以添加到NSArray或NSDictionary等集合中.
语法: ReturnType(^ blockName)(参数)参见示例:
int anInteger = 42;
void (^testBlock)(void) = ^{
NSLog(@"Integer is: %i", anInteger); // anInteger outside variables
};
// calling blocks like
testBlock();
Run Code Online (Sandbox Code Playgroud)
阻止参数:
double (^multiplyTwoValues)(double, double) =
^(double firstValue, double secondValue) {
return firstValue * secondValue;
};
// calling with parameter
double result = multiplyTwoValues(2,4);
NSLog(@"The result is %f", result);
Run Code Online (Sandbox Code Playgroud)
完成处理程序:
而完成处理程序是使用块实现回调功能的一种方法(技术).
完成处理程序只不过是一个简单的块声明,作为参数传递给需要在以后进行回调的方法.
注意:完成处理程序应始终是方法中的最后一个参数.方法可以包含任意数量的参数,但始终将完成处理程序作为参数列表中的最后一个参数.
例:
- (void)beginTaskWithName:(NSString *)name completion:(void(^)(void))callback;
// calling
[self beginTaskWithName:@"MyTask" completion:^{
NSLog(@"Task completed ..");
}];
Run Code Online (Sandbox Code Playgroud)
使用UIKit
类方法的更多示例.
[self presentViewController:viewController animated:YES completion:^{
NSLog(@"xyz View Controller presented ..");
// Other code related to view controller presentation...
}];
Run Code Online (Sandbox Code Playgroud)
[UIView animateWithDuration:0.5
animations:^{
// Animation-related code here...
[self.view setAlpha:0.5];
}
completion:^(BOOL finished) {
// Any completion handler related code here...
NSLog(@"Animation over..");
}];
Run Code Online (Sandbox Code Playgroud)
块:Obj-c
- (void)hardProcessingWithString:(NSString *)input withCompletion:(void (^)(NSString *result))block;
[object hardProcessingWithString:@"commands" withCompletion:^(NSString *result){
NSLog(result);
}];
Run Code Online (Sandbox Code Playgroud)
闭包:斯威夫特
func hardProcessingWithString(input: String, completion: (result: String) -> Void) {
...
completion("we finished!")
}
Run Code Online (Sandbox Code Playgroud)
例如,完成闭包只是一个带参数字符串并返回void的函数.
闭包是自包含的功能块,可以在代码中传递和使用.Swift中的闭包类似于C和Objective-C中的块以及其他编程语言中的lambdas.
闭包是第一类对象,因此它们可以嵌套并传递(与Objective-C中的块一样).在Swift中,函数只是闭包的一个特例.
归档时间: |
|
查看次数: |
26465 次 |
最近记录: |