enter code here
我在调度小组尝试了很多事情,但无法获得稳定的结果。
自服务器以来,我使用Alamofire来获取数据。我已经在Helper类中编写了一个函数,并在AppDelegate.swift中使用了此函数。
我不知道在调用函数时是否将调度组放在AppDelegate中,还是仅将调度组放在Helper类的函数中。
func alomofireGet(URL: String, onCompletion:@escaping ((JSON) -> Void)) {
// let group = DispatchGroup()
var contentJSON = JSON()
// group.enter()
Alamofire.request(URL, method: .get).responseJSON() { (reponse) in
if reponse.result.isSuccess {
contentJSON = JSON(reponse.result.value!)
} else {
contentJSON = JSON(reponse.result.error!)
}
// group.leave()
}
// group.notify(queue: .main) {
onCompletion(contentJSON)
}
在App委托中,我编写了一个在类中调用该函数的函数。
func connect() {
let group = DispatchGroup()
let _: Bool = KeychainWrapper.standard.removeObject(forKey: "token")
var token = String()
group.enter()
Helper().alomofireGet(URL: "http://192.168.1.19/app_dev.php/login/app") { contenuJSON in
token = contenuJSON["csrfToken"].stringValue
group.leave()
}
group.notify(queue: .main) {
let _: Bool = KeychainWrapper.standard.set(token, forKey: "token")
let t: String? = KeychainWrapper.standard.string(forKey: "token")
print(t!)
}
}
问题是变量“ t”为空。 当我在应用程序委托中调用keychainWrapper时,钥匙串也为空。
PS:我还有其他任务,我只是减少了代码
答案 0 :(得分:0)
func alomofireGet(URL: String, onCompletion:@escaping ((JSON) -> Void)) {
// let group = DispatchGroup()
var contentJSON = JSON()
// group.enter()
Alamofire.request(URL, method: .get).responseJSON() { (reponse) in
if reponse.result.isSuccess {
contentJSON = JSON(reponse.result.value!)
} else {
contentJSON = JSON(reponse.result.error!)
}
// group.leave()
}
// group.notify(queue: .main) {// where you call wait()function. This blocks the current thread until the group’s tasks have completed.
onCompletion(contentJSON)
}
答案 1 :(得分:0)
我尝试这样做,但不是解决方案。我已经在助手中删除了该功能。我在应用程序委托中具有此功能。
func connect(onCompletion : @escaping (String) -> ()) {
let group = DispatchGroup()
var token = String()
let _: Bool = KeychainWrapper.standard.removeObject(forKey: "token")
group.enter()
Alamofire.request("http://192.168.1.19/app_dev.php/login/app", method: .get).responseJSON() { (reponse) in
if reponse.result.isSuccess {
let contentJSON = JSON(reponse.result.value!)
token = contentJSON["csrfToken"].stringValue
} else {
token = "Invalid Token"
}
group.leave()
}
group.notify(queue : DispatchQueue.global()) {
onCompletion(token)
}
}
当我打印令牌时,我有一条空消息。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
Thread.sleep(forTimeInterval: 1.5)
connect() { token in
print(token)
}
return true
}