= nil){ VMXMLParser().initWithURL(url, completionHandler: completionHandler)...= nil){ VMXMLParser().initWithURLString(urlString, completionHandler: completionHandler...= nil){ VMXMLParser().initWithContentsOfData(data, completionHandler:completionHandler...= nil) -> AnyObject { parseXMLForUrl(url :url, completionHandler: completionHandler)...parseXMLForUrl(url :url, completionHandler: completionHandler) return self }
*)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler...:(void (^)(NSURLRequest * _Nullable))completionHandler方法如下: - (void)URLSession:(NSURLSession *)session...*)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler...:(void (^)(NSURLRequest * _Nullable))completionHandler { // Identify the operation that runs...:completionHandler]; } else { if (completionHandler) { completionHandler(customRequest
:completionHandler]; return dataTask; } 5....:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler { __block...:completionHandler]; return downloadTask; } 其中self.session是AFURLSessionManager.h中的属性 @property (...[self dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:completionHandler...:completionHandler]; return dataTask; } 6.
*)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler...:(void (^)(NSURLRequest *))completionHandler 首先看一下系统的API接口 /* An HTTP request is attempting to perform...:(void (^)(NSURLRequest * _Nullable))completionHandler; 下面看一下AFN中该代理方法的实现 - (void)URLSession:(NSURLSession...:(void (^)(NSURLRequest *))completionHandler { NSURLRequest *redirectRequest = request; if (...接着就是利用生成的request重新请求 if (completionHandler) { completionHandler(redirectRequest); } 这个方法是在服务器去重定向的时候
webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler...:(void (^)(void))completionHandler { UIAlertController * alertController = [UIAlertController alertControllerWithTitle...webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler...:(void (^)(BOOL))completionHandler { UIAlertController *alertController = [UIAlertController alertControllerWithTitle...:(void (^)(NSString * _Nullable))completionHandler { UIAlertController * alertController = [
苹果在iOS 10 中已经弃用了openURL:这个旧方法,用openURL:options:completionHandler:来代替。...支付宝等) iOS 10 中的更新 苹果在UIKit相关的 What’s New in iOS 文档中提到: The new UIApplication method openURL:options:completionHandler...翻译如下: 新的UIApplication 方法`openURL:options:completionHandler:` 会异步执行,并在主队列中调用这个指定的 `completion handler`...:nil]; // Swift UIApplication.shared.open(url, options: [:], completionHandler: nil) 实际上,只要你仍需要支持iOS...:)]) { [application openURL:URL options:@{} completionHandler:^(BOOL success) { NSLog
:(NSURLRequest*)requestcompletionHandler:(void(^)(NSData*data,NSURLResponse*response,NSError*error))completionHandler...:(void(^)(NSURLSessionResponseDisposition disposition))completionHandler { _urlResponse= response; //...: (void (^)(NSCachedURLResponse *_Nullable)) completionHandler { completionHandler(proposedResponse);...:(void (^)(NSURLRequest*))completionHandler { NSMutableURLRequest*redirectRequest; redirectRequest =...:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler{ NSLog
*)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler...:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler; 首先看一下苹果该方法的API /* The task...:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler; 看一下AFN中该方法的实现 - (void)URLSession...) { completionHandler(disposition); } } 这里,NSURLSessionResponseDisposition disposition =...:(void (^)(NSCachedURLResponse * _Nullable cachedResponse))completionHandler; 首先看一下苹果该方法的API /* Invoke
, completionHandler: CompletionHandler?)..., completionHandler: CompletionHandler?)...第四个参数类型CompletionHandler也一样是个闭包类型的别名: public typealias CompletionHandler = ((image: UIImage?..., completionHandler: CompletionHandler?)..., completionHandler: CompletionHandler?
:(void (^)(NSError * _Nullable))completionHandler { [self addObserver:self forKeyPath:...:completionHandler]; } /////////////////////////////////停止隧道/////////////////////////////////////////...///////// - (void)stopTunnelWithReason:(NEProviderStopReason)reason completionHandler:(void (^)(void)...if (error) { if (completionHandler) { completionHandler(error); ...} } else { if (completionHandler) { completionHandler(nil);
3.在原生得到结果后,需要回调给JS,通过completionHandler 回调给JS 4.completionHandler 回调的参数和返回值都是空 /** 下面这三个方法根据前面的字面意思就能区分记住...// 在原生得到结果后,需要回调给JS,通过completionHandler 回调给JS // completionHandler 回调的参数和返回值都是空 -(void)webView:(WKWebView...回调给JS 4.大家注意这个回调的completionHandler参数是字符串 // runJavaScriptTextInput // 要求用户输入一段文本 // 在原生输入得到文本内容后,通过...completionHandler回调给JS 大家注意这个回调的completionHandler参数是字符串 -(void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt...:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler
- (void)fetchPatchInfo:(NSString *) urlStr completionHandler:(void (^)(NSDictionary * patchInfo, NSError...* error))completionHandler { NSURLSessionConfiguration * defaultConfigObject = [NSURLSessionConfiguration...依然是要封装一个简单函数,下载完成后,通过block传出文件临时的保存位置: -(void) downloadFileFrom:(NSString * ) urlStr completionHandler...: (void (^)(NSURL *location, NSError * error)) completionHandler { NSURL * url = [NSURL URLWithString...:(void (^)(NSDictionary * patchInfo, NSError * error))completionHandler { NSURLSessionConfiguration
webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler...:(void (^)(void))completionHandler{ completionHandler(); NSLog(@"3-----%@",message); } 输出的message...:(void (^)(BOOL result))completionHandler{ completionHandler(YES); NSLog(@"-----%@",message);...NSString *)prompt defaultText:(nullableNSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler...:(void (^)(NSString *__nullable result))completionHandler{ completionHandler(@"http"); NSLog(@
(.error(error)) } completionHandler(.data(data ??...: @escaping Handler) { let task = dataTask(with: url, completionHandler: completionHandler)...(.error(error)) } completionHandler(.data(data ??...func performRequest(for url: URL, completionHandler: @escaping Handler) { requestedURL =...url let data = "Hello world".data(using: .utf8) completionHandler(data, nil,
:(void (^)(BOOL success, NSError * error))completionHandler { if ( !...completionHandler) { completionHandler = ^(BOOL success, NSError * error){ // nothing...to do... }; } [self yf_fetchPatchInfo: pathInfoUrlStr completionHandler:^(NSDictionary...(YES,nil); return; } [self yf_downloadFileFrom:urlStr completionHandler...completionHandler) { completionHandler = ^(BOOL success, NSError * error){ // nothing
: dispatch_get_main_queue(), ^{ if (self.completionHandler) { self.completionHandler...: dispatch_get_main_queue(), ^{ if (self.completionHandler) { self.completionHandler...:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler { return...[self dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:completionHandler...:completionHandler]; return uploadTask; } //同上 - (NSURLSessionUploadTask *)uploadTaskWithRequest
)downloadAudioWithURLString:(NSString *)urlString completionHandler:(void (^)(NSURL *filePath, NSError...*error))completionHandler {// 1....检查是否有错误if (error) {completionHandler(nil, error);return;}// 9....调用completionHandler回调,传入文件路径和错误信息completionHandler(filePath, nil);}];}];}// 12....如果请求成功,则将音频数据保存到文件中,并调用`completionHandler`回调,传入文件路径和错误信息。
NSURLSessionDataDelegate URLSession:dataTask:didReceiveResponse:completionHandler: URLSession:dataTask...:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler { // 创建代理...= completionHandler; // 任务描述 dataTask.taskDescription = self.taskDescriptionForSessionTasks;...: dispatch_get_main_queue(), ^{ if (self.completionHandler) { self.completionHandler...: dispatch_get_main_queue(), ^{ if (self.completionHandler) { self.completionHandler
, completionHandler: CompletionHandler?...> () in completionHandler?...options.cacheMemoryOnly, completionHandler: nil) } completionHandler...Not start working and early return. guard let completionHandler = completionHandler else { return...= completionHandler { completionHandler() } }) 缓存模块的主要内容就这些了,其他还有一些辅助方法像计算缓存尺寸啊、图片的排序啊、把图片
webView.evaluateJavaScript( "document.documentElement.style.webkitTouchCallout='none';", completionHandler...// JS端调用alert时所传的数据可以通过message拿到 // 在原生得到结果后,需要回调JS,是通过completionHandler回调 self.showNoticeText(message...message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {..., initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?)...-> Void) { // JS端调用prompt函数时,会触发此方法 // 要求输入一段文本 // 在原生输入得到文本内容后,通过completionHandler回调给JS let
领取专属 10元无门槛券
手把手带您无忧上云