ios - var 变量未在 Alamofire Closure 中设置
问题描述
我是 Swift 开发的新手,遇到以下问题:
我通过 Alamofire 进行休息调用以从 REST API 获取数据,但如果我将类属性设置为返回值之一,则它不起作用。其余调用完成后,defaultBotId 仍为空字符串。
如果我查看控制台,它会显示应该设置为该变量的正确字符串
print("Closure: ", defaultBot.defaultBotId)
在我看来,如果我在一个闭包内,那是不可能更改类属性的,或者这里有什么问题?
这是我来自 SinusbotSDK.swift 的代码
import Foundation
import Alamofire
public class SinusbotSDK {
let host: String
let username: String
let password: String
var defaultBotId: String
public init(host: String, username: String, password: String, defaultBotId: String = "") {
self.host = host
self.username = username
self.password = password
self.defaultBotId = defaultBotId
}
public func fetchDefaultBotId() {
AF.request(self.host + "/api/v1/botId")
.validate()
.responseDecodable(of: DefaultBot.self) {
response in guard let defaultBot = response.value else {return}
self.defaultBotId = defaultBot.defaultBotId
print("Closure: ", defaultBot.defaultBotId)
}
}
public func printVar() {
print(self.defaultBotId)
}
}
这是我调用 fetchDefaultBotId() 和 printVar() printVar 的代码,因为字符串仍然为空
import SwiftUI
import SinusbotSDK
struct ContentView: View {
var body: some View {
Text("Hello, world!")
.padding()
Button(action: {
let sinusbot = SinusbotSDK(host: "myHost", username: "myUser", password: "myPassword")
sinusbot.fetchDefaultBotId()
sinusbot.printVar()
}){
Text("Press me")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
解决方案
推荐阅读
- javascript - Discord - 删除命令引发错误,但该命令有效
- reactjs - 如何修复漏洞,为什么在我 npx create-react-app my_file 时没有提供模板?
- javascript - 单击按钮交互discord.js时如何告诉用户轮到他们了
- flutter - 如何在 Flutter Camera Plugin 中实现 Tap To Focus?
- node.js - typeDefs 必须只包含字符串、文档、模式或函数,得到对象
- c++ - C++ binary reading to dynamic char
- javascript - for循环嵌套数组长度无法读取属性错误
- c++ - 奇怪的包括问题。未知的覆盖说明符
- c# - 创建 ssl/tls 安全通道 c# 中的 webclient 错误
- python - 如何允许用户在 Django 中创建自己的帖子?