gpt4 book ai didi

ios - 来自另一个类的变量

转载 作者:行者123 更新时间:2023-11-30 13:04:56 24 4
gpt4 key购买 nike

从另一个类访问变量时遇到问题。

我在这里初始化和修改变量

响应类

import Foundation
import Alamofire

class TheResponse {

typealias JSONStd = [[String : AnyObject]]
var jsonAnswer = [[String:String]]()

var getRes: [[String : String]] {
return jsonAnswer
}

func callAmo(){
let urladdress = "https://api.github.com/users"
Alamofire.request(urladdress).responseJSON(completionHandler: {
response in
//print(response)
self.parseData(JSONData: response.data!)
})
}

func parseData(JSONData : Data){

do {
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStd
let counter = readableJSON.count
//Filling the dictionary
for item in 0...counter - 1 {
let login = readableJSON[item]["login"]
let avatar_url = readableJSON[item]["avatar_url"]
let html_url = readableJSON[item]["html_url"]
let id = String(describing: readableJSON[item]["id"])

var dict:[String:AnyObject] = ["login": login!,
"avatar": avatar_url!,
"profile": html_url!,
"id": id as AnyObject]

jsonAnswer.append(dict as! [String : String])
}
}
catch{
print(error)
}
}
}

如果我在此处打印 jsonAnswer 变量,一切看起来都很好。但我想在我的第二堂课中使用这个变量

import UIKit
import Alamofire

class TableViewController: UITableViewController {
var resObj = TheResponse()
var jsonData = [[String:String]]()


override func viewDidLoad() {
super.viewDidLoad()

resObj.callAmo{ (jsonAns) -> () in
self.jsonData = jsonAns
// print(self.jsonData)
}
print(self.jsonData)

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MainViewCell

return cell
}

}

问题是,当我想打印 TableViewController 类中的变量时,该变量为空。打印出来我只得到[]。

我应该如何访问变量才能使其保持应有的样子?

最佳答案

问题是您还没有调用 callAmo 方法,您需要使用您的方法创建完成闭包,因此请像这样更改代码。

func callAmo(completion: ([[String : String]]) -> ()) {
let urladdress = "https://api.github.com/users"
Alamofire.request(urladdress).responseJSON(completionHandler: {
response in
//print(response)
let dic = self.parseData(JSONData: response.data!)
completion(dic)
})
}

现在从这样的 parseData 方法返回字典。

func parseData(JSONData : Data) -> [[String: String]]{

do {
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStd
let counter = readableJSON.count
//Filling the dictionary
for item in 0...counter - 1 {
let login = readableJSON[item]["login"]
let avatar_url = readableJSON[item]["avatar_url"]
let html_url = readableJSON[item]["html_url"]
let id = String(describing: readableJSON[item]["id"])

var dict:[String:AnyObject] = ["login": login!,
"avatar": avatar_url!,
"profile": html_url!,
"id": id as AnyObject]

jsonAnswer.append(dict as! [String : String])
}
}
catch{
print(error)
}
return jsonAnswer
}

现在在 TableViewControllerviewDidLoad 中调用这个方法,如下所示。

resObj.callAmo{ (jsonAns) -> () in
print(jsonAns)
}

编辑:要获取TableViewController中的数据,请执行以下操作

var jsonData = [[Strin:String]]()

override func viewDidLoad() {
super.viewDidLoad()

resObj.callAmo{ (jsonAns) -> () in
self.jsonData = jsonAns
self.tableView.reloadData()
}
}

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.jsonData.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MainViewCell
return cell
}

关于ios - 来自另一个类的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39505874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com