URLSession 转换为 Swift 3

URLSession Conversion to Swift 3

我已转换为 Swift 3 并收到错误消息

'Cannot convert value of type (UnsafeRawPointer, NSRange, UnsafeMutablePointer)->() to (UnsafeBufferPointer, Data.index, inout Bool)-> Void.

我的代码:

func urlSession(_ session: URLSession, dataTask: URLSessionDataTask,
didReceive data: Data) {
        data.enumerateBytes{[weak self]
        (pointer: UnsafeRawPointer,
        range: NSRange,
        stop: UnsafeMutablePointer<ObjCBool>) in
        let newData = Data(bytes: UnsafePointer<UInt8>(pointer), count: range.length)
        self!.mutableData.append(newData)
    } }

我需要适应什么才能使其发挥作用?

当您尝试编写方法时,它会给您提示

func urlSession(_ session: URLSession, dataTask: URLSessionDataTask,
                    didReceive data: Data) {
        data.enumerateBytes { (<#UnsafeBufferPointer<UInt8>#>, <#Data.Index#>, <#inout Bool#>) in
            <#code#>
        }

    }

带有 <# #> 的参数你只需要为那些所有的局部变量命名,这样你就会得到这些变量中的值。

像下面这样写:

func urlSession(_ session: URLSession, dataTask: URLSessionDataTask,
                didReceive data: Data) {
    data.enumerateBytes { ( buffer ,  index, boolvalue) in

    }
}

我也在学习swift,请让我知道任何使这个答案更好的人。

你已经在获取数据对象并且你想追加数据,那么你为什么要做所有这些事情

func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data){
    responseData?.append(data)
}

这会很好用。

参考https://github.com/ankitthakur/SwiftNetwork/tree/master/Sources/Shared