私は、単にcompletionHandlerを使用してリクエストから情報を取得しようとしています。問題は、コードの他の部分のすべての情報を配列に格納する必要があることです。アクセスできないようです。文字列型に値型 '()'を代入できませんか?
private func loadUserData(completionHandler: @escaping ([String]) ->()) {
// We're getting user info data from JSON response
let session = Twitter.sharedInstance().sessionStore.session()
let client = TWTRAPIClient.withCurrentUser()
let userInfoURL = "https://api.twitter.com/1.1/users/show.json"
let params = ["user_id": session?.userID]
var clientError : NSError?
let request = client.urlRequest(withMethod: "GET", url: userInfoURL, parameters: params, error: &clientError)
client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in
if connectionError != nil {
print("Error: \(connectionError)")
}
do {
let json = JSON(data: data!)
if let userName = json["name"].string,
let description = json["description"].string,
let followersCount = json["followers_count"].int,
let favouritesCount = json["favourites_count"].int,
let followingCount = json["friends_count"].int,
let lang = json["lang"].string,
let nickname = json["screen_name"].string {
self.userData.append(userName)
self.userData.append(description)
self.userData.append(String(followersCount))
self.userData.append(String(favouritesCount))
self.userData.append(String(followingCount))
self.userData.append(lang)
self.userData.append(nickname)
completionHandler(self.userData)
}
}
}
}
func manageUserData(index: Int) {
loadUserData() {_ in
return self.userData[index]
}
}
そして、私は、データがそれを表示することを必要な場所ここにある:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let rowNumber = indexPath.row
let cellIdentifier = "TableViewCell"
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? TableViewCellController else {
fatalError("The dequeued cell is not an instance of TableViewCellController.")
}
switch rowNumber {
case 0:
cell.titlePlaceholder.text = "Name:"
cell.valuePlaceholder.text = manageUserData(index: 1)
をエラーが発生することがあります。この最後の行では:私は、データへのアクセスをどこここにある「asignはできません。データを取得してコードの別の部分からアクセスできるようにするために、私がcompletionHandlerを正しく使用しているかどうかわかりません。
何か考えてください? ありがとうございました!
私はきちんとcompletionHandlerを使用していませんでしたUPDATE 。だから私のmanageUserData機能は次のようになります
private func loadUserData(completion: @escaping (_ myArray: [String]) -> Void)
:
func manageUserData() {
loadUserData {
(result: [String]) in
self.secondUserData = result
}
}
・ホープ、このことができますので、私はでそれを変更しました!
あなたが期待するものは不明です。 'func manageUserData(index:Int)'は値を返しません。したがって、ラベルの 'text'にそれを"割り当てる "ことはできません。テキストではありません。これは文字列ではありません。それは空(値なし)です。 – matt