所以我想解析json api,但是我需要获取另一个json (这是有效的),因为我不能把我第二个json api的数据参数放到全局变量中,这样我就可以把它放到另一个函数中,我有这样的想法,我在第一个urlSession中解析我的第二个json api,但是我总是得到一个空的回调,
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中为我的参数使用它(self.roomId)。
当我试图在我的checkRoom()中分离这两个Nil会话函数时,我总是把它称为"roomId Nil“
发布于 2020-06-27 22:11:19
我不会在通话中亲自打电话。这是在自找麻烦。只需调用第一个端点,从中获取数据,并将从中需要的任何内容传递到逻辑控制器中的第二个调用中。
准码:
import Foundation
class Test {
func getRoom() {
getFirstCall { [weak self] (foo) in
self?.getSecondCall(someArg: foo) {
// Handle data here.
}
}
}
func getFirstCall(completion: @escaping (_ somethingToReturn: String) -> ()) {
guard let url = URL(string: "Some URL") else { return }
URLSession.shared.dataTask(with: url) { data, response, error in
// Logic to ingest data.
completion("foo")
}.resume()
}
func getSecondCall(someArg: String, completion: @escaping () -> ()) {
guard let url = URL(string: "Some URL 2") else { return }
// Use "someArg" however you need in this call. queryParam, body, etc.
URLSession.shared.dataTask(with: url) { data, response, error in
// Logic to ingest data.
completion()
}.resume()
}
}https://stackoverflow.com/questions/62610463
复制相似问题