を渡す前に、私の機能で完成されていることを確認こんにちは、私はこの機能を持っている:スウィフト:urlSession.dataTask結果
私は何をしようとしていますが、私は時のtableViewのcellforrowにplanResultのための結果を得たことを確認することですfunc planAdded(id:Int, user_id:Int) -> Int {
let locationURL = "myurl"
var planResult: Int = 0
let request = URLRequest(url: URL(string: locationURL)!)
let urlSession = URLSession.shared
let task = urlSession.dataTask(with: request, completionHandler:{
(data, response, error) -> Void in
DispatchQueue.main.async {
if let error = error {
print (error)
return
}
if let data = data {
let responseString = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
planResult = responseString!.integerValue
}
}
})
task.resume()
print(planResult)
return planResult
}
indexpath関数。ここで
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
case 4:
if (result == 1){
...
} else if (result == 2){
...
} else {
...
}
default:
cell.fieldLabel.text = ""
}
return cell
}
が私のviewDidLoad関数は、いくつかの理由から
override func viewDidLoad() {
super.viewDidLoad()
self.result = self.planAdded(1, 2)
}
で、これは0を返す続けます。ただし、印刷ラインは実際に正しい値を印刷しています。私はいくつかの研究を行い、これはdataTaskの無神経な呼び出しのためだと信じています。関数が実際に完了し、indexpath関数の値を返す方法がありますか? ありがとう
はい。もう一つ質問があります。結果が== 1になったら、ボタンを作成してサブビューとして追加しました。 cell.addSubview(myButton)。しかし、テーブルをリロードして結果が== 2になると、ボタンは消えませんでした。私はそれをクリアする方法はありますか?ありがとう。 – loveprogramming