Macos 在同步循环中使用NSURLSession

Macos 在同步循环中使用NSURLSession,macos,cocoa,nsurlsession,Macos,Cocoa,Nsurlsession,我有一个处理输入的程序,一次一条记录。对于每个记录,它都会执行一个HTTP POST来查找一些信息(基于该记录的内容),并希望在记录末尾附加它在响应中接收到的一些信息 就我而言,获取输入记录、执行HTTP POST以及将响应附加到记录的过程是一个原子操作。在Cocoa中,NSURLSession是异步的。我不确定如何等待响应并在继续下一条记录之前将其附加到当前记录 这是我的(非工作)代码。问题是在结束时,我不想执行“record.append(results)”,直到闭包完成并生成“result

我有一个处理输入的程序,一次一条记录。对于每个记录,它都会执行一个HTTP POST来查找一些信息(基于该记录的内容),并希望在记录末尾附加它在响应中接收到的一些信息

就我而言,获取输入记录、执行HTTP POST以及将响应附加到记录的过程是一个原子操作。在Cocoa中,NSURLSession是异步的。我不确定如何等待响应并在继续下一条记录之前将其附加到当前记录

这是我的(非工作)代码。问题是在结束时,我不想执行“record.append(results)”,直到闭包完成并生成“results”。有一个密切相关的问题,“结果”是在闭包中定义的,不在闭包之外的范围内。我怎样才能得到我想要的行为?(我更喜欢在Swift中看到代码,但如果您知道如何在Objective-C中做到这一点,请告诉我,我将尝试翻译它。)

我还希望能够向闭包传递一些附加信息(每次通过“for-in”循环都会发生变化),以便在分析响应时使用

我还想知道如何从闭包中获取多个输出参数。我想也许我可以有一个输出结构,因此它将是一个参数,但将保存我想要的各种信息。我想,如果这不可能,我可以将我所想的多个输出参数打包成一个字符串,作为单个输出参数

let regex0: NSRegularExpression = NSRegularExpression(pattern: "\\A.*Part1:(.*?)<.*Part2:(.*?)<.*Part 3:(.*?)<.*\\z", options: NSRegularExpressionOptions.DotMatchesLineSeparators, error: nil)!

let wdivURL = NSURL(string: "http://NotTheRealDomain.com")
let request = NSMutableURLRequest(URL:wdivURL!)
request.HTTPMethod = "POST"

var myArray: [String] = ["First", "Second", "Third"]
for record in myArray {
    var bodyData: String = "Not the real body" + record
    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {data, response, error in
        if error != nil {
            println("NSURLSession error = \(error)")
            return
        }
        var responseString = NSString(data: data, encoding: NSUTF8StringEncoding)!
        var results: String = regex0.stringByReplacingMatchesInString(responseString as String, options: NSMatchingOptions.allZeros, range: NSMakeRange(0, responseString.length), withTemplate: "\t$1\t$2\t$3")
    }
    task.resume()
    record.append(results)
}
让regex0:NSRegularExpression=NSRegularExpression(模式:“\\A.*Part1:(*))