-9
サーバーにアクセスするアプリケーションがあるとします。サーバーから新しいデータを取得する方法は?サーバーから新しいデータを取得する方法は?
サーバーにアクセスするアプリケーションがあるとします。サーバーから新しいデータを取得する方法は?サーバーから新しいデータを取得する方法は?
非常に多くの投票を受けたことに驚くかもしれません。その理由は、what you have tried to solve the problemに関する情報を提供していないためです。
具体的な情報を入力していないので、基本的に構造化されたデータ(JSONなど)をサーバーから送信/取得することを前提とします。
次のコードは、GET/POST/PUTリクエストを送信して簡単に処理できるようにします。
public enum RESTMethod:String {
case get = "GET"
case post = "POST"
case put = "PUT"
}
public func sendRequest(_ url: String,
method: RESTMethod,
headers: [String : String],
parameters: [String : Any],
completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionTask! {
let requestURL: URL
if method == .get {
let parameterString = parameters.stringFromHttpParameters()
requestURL = URL(string:"\(url)?\(parameterString)")!
} else {
requestURL = URL(string: url)!
}
var request = URLRequest(url: requestURL)
request.allHTTPHeaderFields = headers
request.httpMethod = method.rawValue
if method == .post {
let jsonData = try? JSONSerialization.data(withJSONObject: parameters)
request.httpBody = jsonData
}
request.timeoutInterval = 60
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
completionHandler(data,response,error)
}
task.resume()
return task
}
extension Dictionary {
/// Build string representation of HTTP parameter dictionary of keys and objects
func stringFromHttpParameters() -> String {
let parameterArray = self.map { (key, value) -> String in
let percentEscapedKey = (key as! String).addingPercentEncodingForURLQueryValue()!
let percentEscapedValue = (value as? String ?? "\(value)").addingPercentEncodingForURLQueryValue()!
return "\(percentEscapedKey)=\(percentEscapedValue)"
}
return parameterArray.joined(separator: "&")
}
}
使用法:
sendRequest("http://yourserver",
method: .get, // .post or .put
headers: [],
parameters: [],
completionHandler: { (data, response, error) in
// Handle response here
})
使用URLSession dataTask方法 –