私は、この機能を使用して、MySQLデータベースからプレーヤーのスコアを回復しています。他のチュートリアルでは、アプリケーションからデータを送信するときにURLSessionのアプローチが有用であることがわかりましたが、実際に関数の戻り値をどこでも使用できるようになりましたか?のようなものを探し続けるリターンのある関数でURLSessionを使用できますか?
task.resume()
task.end()
return (rank, name, score)
?
func downloadLocalScores(_ choice: Int) -> ([String], [String], [String]) {
var url: URL
let id: String = getUserID("id")
if choice == 0 {
url = NSURL(string: "myPHPscript.php")! as URL
} else {
url = NSURL(string: "myPHPscript2.php")! as URL
}
let request = NSMutableURLRequest(url: url)
request.httpMethod = "POST"
let postString = "id=\(id)"
request.httpBody = postString.data(using: String.Encoding.utf8)
var name: [String] = []
var score: [String] = []
var rank: [String] = []
if Reachability().isInternetAvailable() == true {
let task = URLSession.shared.dataTask(with: request as URLRequest) {
data, response, error in
if error == nil {
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
let variables = try! JSONSerialization.jsonObject(with: data! as Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
for i in 0..<variables.count {
let level = variables[i] as! [String:AnyObject]
name.append(level["name"] as! String)
score.append(level["score"] as! String)
rank.append(level["rank"] as! String)
}
} else {
print(error)
}
}
task.resume()
return (rank, name, score)
} else {
return (["NO CONNECTION"], ["0"])
}
}
私はスコアをダウンロードするには、別の機能を持っていますが、トップのスコアを要求され、アプリ
func downloadScores(_ choice: Int) -> ([String], [String]) {
var url: URL
if choice == 0 {
url = NSURL(string: "myPHPscript.php")! as URL
} else {
url = NSURL(string: "myPHPscript2.php")! as URL
}
let data = NSData(contentsOf: url)
var variables: NSArray = []
if Reachability().isInternetAvailable() == true {
variables = try! JSONSerialization.jsonObject(with: data! as Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
var name: [String] = []
var score: [String] = []
for i in 0..<variables.count {
let level = variables[i] as! [String:AnyObject]
name.append(level["name"] as! String)
score.append(level["score"] as! String)
}
return (name, score)
} else {
return (["No connection"], [""])
}
}
からの任意の入力を取る必要はありません、私は完全にまだないです私のアプリからデータを送信する他のオプションに慣れているので、最後の機能はPOSTに適応できますか?昨夜何か試したが、NSMutableURLRequestの代わりにタイプURLを要求するデータ= NSDataにこだわってしまった。
グローバル変数を作成して最初の関数を追加する必要がありますが、その結果が使用された後にリカバリされ、いっぱいになると遅延や更新の方法が見つかりません。私は、彼らがviewDidLoad()の後で使用されるので、それらを待っているアプリは気にしない。
NSURLSessionで「返された」値を持つことはできません。非同期システムをバイパスしようとしているということだけではありません。バイパスすることはできますが、お勧めしません。ちょうど閉鎖を使用してください。物事は、非同期のものを使用していない、現在のスレッドをブロックする必要があります、そして、それは主なもので、UIを(かなり醜い)ブロックしています。また、 'NSData(contentsOf:)'はPOSTではなくGETを実行しています。 – Larme
あなたの質問は何ですか? – alecnash