在初始化之前使用的变量“theData”,我应该如何修复

Posted

技术标签:

【中文标题】在初始化之前使用的变量“theData”,我应该如何修复【英文标题】:Variable 'theData' used before being initialized, How should I fix 【发布时间】:2021-01-27 09:48:25 【问题描述】:

我正在尝试通过 Apollo 框架和一个 graphql api 来获取数据然后返回它。一旦我将数据保存在另一个 swift 文件中,我想调用数据的某些部分并将其分配给一个变量。我得到的错误是在初始化之前使用的变量。如果尝试从闭包中返回变量,我会得到“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
        
    
    
    
    
    

【问题讨论】:

从这里开始 programmingios.net/what-asynchronous-means 并阅读本文和接下来的两篇文章。 【参考方案1】:

Void 函数中出现意外的非 Void 返回值。

您收到此警告的原因是您无法从闭包内部返回值。使用闭包代替返回值。

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

【讨论】:

以上是关于在初始化之前使用的变量“theData”,我应该如何修复的主要内容,如果未能解决你的问题,请参考以下文章

在初始化之前使用结构

MKCoordinateSpan中的错误,表示在自我可用之前运行

Clang 没有报告 C++ 中未初始化的变量?

在keil中初始化时如何定义一个全局变量,并且赋初值为0xff

如何要求消费者使用类库来初始化静态变量

初始化问题之前使用的另一个变量“__”