【发布时间】:2024-05-22 21:45:01
【问题描述】:
所以我想解析 json api,但是我获取该参数来解析的方式我需要获取另一个 json(它正在工作),并且由于我无法将我的第二个 json api 的数据参数放入全局变量中,所以我可以把它放到另一个函数中,我有这个想法,我在第一个 urlSession 中解析我的第二个 json api,但我总是得到一个 nil 回调,
override func viewDidLoad() {
super.viewDidLoad()
getRoom()
}
func getRoom() {
guard let url = URL(Some url) else {return}
print(url)
URLSession.shared.dataTask(with: url) { data, resp, err in
guard let data = data else {return}
do{
let decoder = JSONDecoder()
let room = try decoder.decode(User.self, from: data)
self.dataClient = [room].compactMap{$0!.data}
self.DATA = [room]
print("ini dataClient ????\(self.dataClient)")
let roomid = self.dataClient[0].RoomID
self.roomId = roomid
print(self.roomId)
DispatchQueue.main.async {
checkRoom()
}
}catch{
print(err!)
}
}.resume()
}
func checkRoom() {
if self.roomId == 0 {
print("roomId nil")
}else if self.roomId != 0{
print("ini room id \(self.roomId)")
guard let urlRoom = URL(some url) else {return
URLSession.shared.dataTask(with: urlRoom) { (data, resp, err) in
guard let data = data else {return}
do{
let decoder = JSONDecoder()
let roomAv = try decoder.decode(User.self, from: data)
self.DATA = [roomAv]
print("ini boolnya ???? \(self.DATA[0].success)")
print("Success")
}catch{
print("damn????") // this line always get called
}
}.resume()
}
}
谁能告诉我任何想法?我将第二个 urlsession 放在第一个 urlsession 中的原因是因为我在第二个 Json api 中需要那个 (self.roomId) 作为我的参数。
当我尝试在我的 checkRoom() 中分离两个 urlsession 函数时,总是称为“roomId Nil”
【问题讨论】:
-
不能直接把roomId作为参数传递
checkRoom(roomId)吗?您是否验证过 json 解码工作正常? -
我已经验证了邮递员的 json 解码及其工作,但我想知道如何像您说的先生那样将 roomId 作为参数传递
-
将 checkRoom 方法更改为
func checkRoom(roomId: Int)并将异步调度调用更改为DispatchQueue.main.async { checkRoom(roomId) }。请注意,我假设 roomId 是一个整数
标签: json swift api urlsession