私はSwiftにかなり慣れていないので、HTTPリクエストを作成しようとしています。私は多くのアイデアを試しました このStack Overflowの質問 ですが、プレイグラウンドで実行するとすべてエラーが発生しました。これらはすべてSwift 1.0-2.0。
Swift3でHTTPリクエストを作成するにはどうすればよいですか?
Updateこの回答 で提示された最初の解決策を試しましたが、Xcodeの提案された「修正」を完了した後、4つのエラーが発生しました:
コードにはいくつかの問題があります。
Info.plist
_ファイルで例外を作成する必要があります。dataTask(urlwith: ! as URL)
。感嘆符(_!
_)で何をアンラップしようとしていますか?変数名は何ですか?多くのクラス名がSwift 2と3の間で変更されているため、見つかった回答は適用できない場合があります。以下に httpbin.org に接続する例を示します。 IPアドレスを取得するには:
_import PlaygroundSupport
import Foundation
let url = URL(string: "https://httpbin.org/ip")
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard error == nil else {
print(error!)
return
}
guard let data = data else {
print("Data is empty")
return
}
let json = try! JSONSerialization.jsonObject(with: data, options: [])
print(json)
}
task.resume()
PlaygroundPage.current.needsIndefiniteExecution = true
_
コードにタイプミス(呼び出しにurl変数がない)があります。
とにかく、Swift 3では、新しいURL構造体とURLSessionクラスを使用することをお勧めします。
また、XCPlaygroundはPlaygroundSupportになりました。
また、Stringが使用可能な場合、NSStringを使用する必要はありません。
_import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let url = URL(string: "http://stackoverflow.com/")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if let data = data,
html = String(data: data, encoding: String.Encoding.utf8) {
print(html)
}
}
task.resume()
_
注:これはXcode 8ベータ2用です。ベータ1では、shared
ではなくshared()
を実行する必要があります。iOSを使用している場合は、_import UIKit
_、ただし、代わりに_import Cocoa
_を使用すると、このコードはOS Xでも機能します。
あなたのエラーでは、URLが欠落しているようです。
import UIKit
import Foundation
import PlaygroundSupport
let url:URL = URL(string: "http://jsonplaceholder.typicode.com/posts")!
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
let paramString = "data=Hello"
request.httpBody = paramString.data(using: String.Encoding.utf8)
let task = session.dataTask(with: request as URLRequest) {
(
data, response, error) in
guard let data = data, let _:URLResponse = response where error == nil else {
print("error")
return
}
let dataString = String(data: data, encoding: String.Encoding.utf8)
print(dataString)
}
task.resume()
PlaygroundPage.current.needsIndefiniteExecution = true