私は、HTTP Post Requestsの関数とtask.resumeのハンドルの順番で迅速に失われてしまいました。POST Request Swiftからメインクラスの変数にデータを戻す
私のクラスには "siteList"という変数があります。 JSONデータをsiteList配列に取り込む関数を実行しようとしています。 JSONデータはPOST REQUESTからのものです。
- 私はURLSession要求内のサイトリストにアクセスすることはできません。
私が午前問題は、ということです。 self.siteListとして割り当てる必要があります。self.siteListは、クラスレベルのsiteListに値を渡しません。
- すぐにファイルレベルで宣言されているので、関数の外でsiteData変数を使用することができますが、問題は私が関数の順序を正しく取得できないようです。つまり、task.resume()の後にsiteDataを出力しようとすると、空の値が返されます。
私はこれを2つの機能、1つはプロセスPOSTリクエストを取得し、もう1つはsiteDataをsiteList変数に渡して補完ハンドラを使用するようにしました。しかし問題は2番目の関数がself.functionNameでなければなりません。これは基本的にクラスレベルでアクセス可能な値になります。
私はおそらくここで何かが不足していると確信しています。
var siteData = NSArray()
class SiteListManager: NSObject {
var siteList=[Site]()
let category = GlobalConstants.kCat
let keyword = GlobalConstants.kKeyword
let latitude = GlobalConstants.kLat
let longitude = GlobalConstants.kLong
// MARK: - init
override init() {
super.init()
getSiteList(category: category, keyword:keyword, latitude:latitude, longitude:longitude)
}
func getSiteList(category: String, keyword: String, latitude: String, longitude: String) {
let myUrl = URL(string: "http://www.goseesa.org.php7-34.ord1-1.websitetestlink.com/sites/list");
var request = URLRequest(url:myUrl!)
request.httpMethod = "POST"// Compose a query string
let postString = "keyword="+category+"&cid="+keyword+"&lat="+latitude+"&long="+longitude
request.httpBody = postString.data(using: String.Encoding.utf8);
let task = URLSession.shared.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) in
do {
siteData = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSArray
let kTotalSites = siteData.count
self.siteList = [Site]()
// Now we can access value of First Name by its key
//let siteList = parseJSON["user"] as? NSDictionary
for i in 0..<kTotalSites {
let siteContent = siteData[i] as! NSDictionary
let name = siteContent.value(forKey: "name") as! String
//load site information
let site = Site(name: name)
self.siteList.append(site)
}//end of compiling site list
}catch {
print(error)
}
})
task.resume()
}
}
ありがとうございました!私はあなたのヒントでこれが今働いている! – Judy
ちょっと@Judy答えをアップしてください、ありがとう! –