gpt4 book ai didi

swift - 如何强制 Swift 等待前面的代码完成?

转载 作者:搜寻专家 更新时间:2023-11-01 05:54:45 25 4
gpt4 key购买 nike

我刚开始学习 Swift,我正在使用背后的 API,问题是:Swift 不等待我的函数完成,因此我的最后一个函数看起来好像之前没有代码完成

import Foundation
import UIKit
import Alamofire
import SwiftyJSON

// Classes
class User {

init(data: Any) {
self.sex = JSON(data)["sex"].string!
print(self.sex)
}

var id: Int = 1
var online: Bool = false
var picture: String = ""
var sex: String = "Male"
}

// Fonctions
func getBackground(_ apiURL: String, completion : @escaping(_ :Any) -> Void) {
// Requête API avec Alamofire + SwiftyJSON
AF.request(apiURL, method: .get).validate().responseJSON { response in
switch response.result {
case .success(let value):
let jsonData = JSON(value)
completion(jsonData["results"])
case .failure(let error):
print(error)
}

}
}

// Requête de connexion
getBackground("https://x..me", completion: { response in
let user = User(data: response)
})

print(String(user.id) + ": " + String(user.online!))

Screenshot here

我有这个错误:“使用未解析的标识符‘user’”,我猜想 Swift 没有得到 User 之前定义的事实

我的所有工作都与我的 API 完美配合,“self.sex”在我构建代码时设置并显示。但我仍然“锁定”,就像我在这段代码之后什么也做不了,因为 Swift 不想等待。

我尝试了 async 和 sync 函数,但是我接下来的所有代码都必须在一个函数下...

提前致谢

最佳答案

无需等待。

print 行 - 以及执行用户的代码 - 放在completion闭包中

getBackground("https://a.clet.me", completion: { response in
let user = User(data: response)
print(String(user.id) + ": " + String(user.online!))
})

错误 Use of unresolved identifier 'user' 发生是因为局部变量 user 仅在以下范围 ({}) 内可见它的声明。

关于swift - 如何强制 Swift 等待前面的代码完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54369075/

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