变量 'theData' 在初始化前被使用,我应该如何修复

Variable 'theData' used before being initialized, How should I fix

我正在尝试使用 Apollo 框架和 graphql api 来获取数据,然后 return 它。一旦我在另一个 swift 文件中有了数据,我想调用数据的某些部分并将其分配给一个变量。我得到的错误是在初始化之前使用的变量。如果尝试 return 闭包中的变量,我会得到“Unexpected Non-Void Return Value In Void Function”。我听说过解决该错误的方法,但我不完全理解它以及它如何与我的代码一起工作。如果您需要更多代码或上下文,可以给我发消息,我可以分享我的 GitHub 存储库。对不起,如果代码不好,请不要烤我。我还是初学者。

import Foundation
import Apollo

struct AniListAPI {
    let aniListUrl = "https://graphql.anilist.co"
    
    func ObtainData(AnimeID: Int)-> QueryQuery.Data{
        
        var theData: QueryQuery.Data
        
        let theInfo = QueryQuery(id: AnimeID)
        
            
            
            GraphClient.fetch(query: theInfo) { result in
                
                switch result {
                
                case .failure(let error):
                    print("A big No no happened \(error)")
                    
                case .success(let GraphQLResult):
                    guard let Info = GraphQLResult.data else {return}
                    
                    theData = Info
                    
                }
                
        }
        
        return theData
        
    }
    
    
    
    
}

意外 Non-Void Return 无效函数中的值。

The reason you're getting this warning is because you can't return value from inside the closure. Use closure instead of returning value.

func ObtainData(AnimeID: Int, completion: @escaping (Data) -> Void) {

   var TheData: QueryQuery.Data
        
        let TheInfo = QueryQuery(id: AnimeID)
        
        GraphClient.fetch(query: TheInfo) { result in
            switch result {
            
            case .failure(let error):
                print("A big no no happened retard \(error)")
                
            case .success(let GraphQLResult):
                guard let Info = GraphQLResult.data else {return}
                
                TheData = Info
                completion(TheData)
            }
            
        }    
}

并称它为..

ObtainData(AnimeID: 123) { (anyData) in
    print (anyData)
    // continue your logic
}