Пример класса загрузчика без Alamofire:
class Downloader {
class func load(URL: NSURL) {
let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
let request = NSMutableURLRequest(URL: URL)
request.HTTPMethod = "GET"
let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if (error == nil) {
// Success
let statusCode = (response as NSHTTPURLResponse).statusCode
println("Success: \(statusCode)")
// This is your file-variable:
// data
}
else {
// Failure
println("Failure: %@", error.localizedDescription);
}
})
task.resume()
}
}
Вот как использовать его в своем собственном коде:
class Foo {
func bar() {
if var URL = NSURL(string: "http://www.mywebsite.com/myfile.pdf") {
Downloader.load(URL)
}
}
}
Swift 3 Version
Также обратите внимание, чтобы загружать большие файлы на диск вместо этого в память. см. `downloadTask:
class Downloader {
class func load(url: URL, to localUrl: URL, completion: @escaping () -> ()) {
let sessionConfig = URLSessionConfiguration.default
let session = URLSession(configuration: sessionConfig)
let request = try! URLRequest(url: url, method: .get)
let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in
if let tempLocalUrl = tempLocalUrl, error == nil {
// Success
if let statusCode = (response as? HTTPURLResponse)?.statusCode {
print("Success: \(statusCode)")
}
do {
try FileManager.default.copyItem(at: tempLocalUrl, to: localUrl)
completion()
} catch (let writeError) {
print("error writing file \(localUrl) : \(writeError)")
}
} else {
print("Failure: %@", error?.localizedDescription);
}
}
task.resume()
}
}
Если вы проверите исходный код для RayCaster в
https://github.com/mrdoob/three.js/blob/master/src/core/Raycaster.js
оказалось бы, что функция intersectObject проверяет только те объекты, которые являются экземплярами THREE.Particle или THREE.Mesh, а не THREE.Sprite. Возможно, это связано с тем, что спрайты могут быть настроены на использование экранных координат, и поэтому луч, который проецируется в вашу 3D-сцену, не имеет смысла в этой ситуации или если он помещается в сцену, так как изображение спрайта всегда обращено к камере, t, как ваша стандартная 3d-сетка.
Возможно, вы могли бы прикрепить PlaneGeometry или очень тонкую CubeGeometry к положению вашего спрайта, установить его вращение на вращение камеры так, чтобы оно всегда было параллельным вид плоскости камеры, такой как спрайт, а затем проверить пересечения с сеткой вместо этого?