在初始化之前使用的变量“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中的错误,表示在自我可用之前运行