我想打印从viewDidLoad
获取的数据。
我不想从自定义函数本身打印它。
当我在 viewDidLoad 中调用 fetch 函数时。它应该获取所有数据。
之后我应该能够从 viewDidLoad 本身或任何地方访问或打印该数据。
class ContactViewController: UIViewController {
@IBOutlet var lblEmail: UILabel!
@IBOutlet var lblLocation: UILabel!
@IBOutlet var mapUIView: UIView!
var email = String()
var location = String()
var lati = Double()
var long = Double()
override func viewDidLoad() {
super.viewDidLoad()
self.fetchData()
print(email)
self.lblEmail.text = self.email
}
func fetchData(){
let manager = APIManager()
manager.parsingGet(url: BaseURL.contact) { (JSON, Status) in
if Status {
let dict = JSON.dictionaryObject
let data = dict!["data"] as! [String:Any]
// let lat = data["latitude"] as! Double
// let lon = data["longitude"] as! Double
let mail = data["email"] as! String
let loc = data["location"] as! String
DispatchQueue.main.async {
self.email = mail
self.location = loc
// self.lati = lat
//self.long = lon
}
}
}
}
}
最佳答案
您无法打印从 viewDidLoad()
方法中的 API 响应获取的任何数据,因为 viewDidLoad()
方法中指定的所有代码行都会连续执行,不会等待您的 API 调用完成。
即使您有一个快速的服务器,也需要几毫秒的时间才能访问您的 API 并获得响应。届时,您的编译器将使用 viewDidLoad()
方法执行所有代码行。
因此,您不妨在 fetchData()
方法中打印 DispatchQueue.main.async
中的数据。
您可以尝试使用回调函数。这可能是实现您想要的目标的可能方法。尝试这样的事情......
override func viewDidLoad() {
super.viewDidLoad()
getData(completion:{ result in
print(email)
self.lblEmail.text = self.email
})
}
func getData(completion: (Bool)->()) {
if status{
let dict = JSON.dictionaryObject
let data = dict!["data"] as! [String:Any]
let mail = data["email"] as! String
let loc = data["location"] as! String
DispatchQueue.main.async {
self.email = mail
self.location = loc
completion(true)
}
} else {
completion(false)
}
}
关于ios - 我如何获取数据并在 viewdidload 中使用它......而不是在函数内部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56071919/