Can I somehow do a synchronous HTTP request via NSURLSession in Swift

前端 未结 5 1336
有刺的猬
有刺的猬 2020-11-29 01:01

Can I somehow do a synchronous HTTP request via NSURLSession in Swift?

I can do an asynchronous request via the following code:

if let u         


        
5条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-29 01:24

    Apple thread discussing the same issue.

    + (NSData *)sendSynchronousRequest:(NSURLRequest *)request  
        returningResponse:(__autoreleasing NSURLResponse **)responsePtr  
        error:(__autoreleasing NSError **)errorPtr {  
        dispatch_semaphore_t    sem;  
        __block NSData *        result;  
    
        result = nil;  
    
        sem = dispatch_semaphore_create(0);  
    
        [[[NSURLSession sharedSession] dataTaskWithRequest:request  
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {  
            if (errorPtr != NULL) {  
                *errorPtr = error;  
            }  
            if (responsePtr != NULL) {  
                *responsePtr = response;  
            }  
            if (error == nil) {  
                result = data;  
            }  
            dispatch_semaphore_signal(sem);  
        }] resume];  
    
        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);  
    
       return result;  
    }  
    

    Answer by Quinn "The Eskimo!" Apple Developer Relations, Developer Technical Support, Core OS/Hardware

提交回复
热议问题