首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift UrlSession在UrlSession中不起作用

Swift UrlSession在UrlSession中不起作用
EN

Stack Overflow用户
提问于 2020-06-27 21:12:11
回答 1查看 40关注 0票数 0

所以我想解析json api,但是我需要获取另一个json (这是有效的),因为我不能把我第二个json api的数据参数放到全局变量中,这样我就可以把它放到另一个函数中,我有这样的想法,我在第一个urlSession中解析我的第二个json api,但是我总是得到一个空的回调,

代码语言:javascript
复制
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“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-27 22:11:19

我不会在通话中亲自打电话。这是在自找麻烦。只需调用第一个端点,从中获取数据,并将从中需要的任何内容传递到逻辑控制器中的第二个调用中。

准码:

代码语言:javascript
复制
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()
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62610463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档