尝试 return 函数中的数组时收到未解析的标识符
unresolved identifier received when trying to return an array in function
我收到一个错误:“在尝试 return 数据数组时使用了未解析的标识符 'data'。我的代码列在下面。有人可以告诉我为什么会这样吗?
public func loadData()->[Q] {
let publicData = CKContainer.default().publicCloudDatabase
let pred = NSPredicate(value: true)
let query = CKQuery(recordType: "question", predicate: pred)
publicData.perform(query, inZoneWith: nil, completionHandler: ({results, error in
if(error != nil) {
print(error?.localizedDescription)
} else {
if results!.count > 0 {
var data = [Q]()
for result in results!{
let quest = result.object(forKey: "question_name") as! String!
let a = result.object(forKey: "a") as! String!
let b = result.object(forKey: "b") as! String!
let c = result.object(forKey: "c") as! String!
let d = result.object(forKey: "d") as! String!
let answer = result.object(forKey: "answer") as! String!
let category = result.object(forKey: "category") as! String!
let final = Q(quest: quest!, A:a!, B: b!, C: c!, D: d!, answer: answer!, category: category!)
data.append(final)
}
}
}
}))
return data
}
不!不!不!,永远不会使用sleep
解决异步任务!太可怕了。
为方便起见,使用 success
和 failure
个案例和关联类型创建枚举
enum Result {
case success([Q]), failure(Error)
}
在loadData
returndata
或error
中完成处理程序。我删除了一堆多余的括号、感叹号和数组的空检查。在没有错误且没有匹配数据的情况下,Q
的空数组被 returned.
public func loadData(completion: @escaping (Result)->() ) {
let publicData = CKContainer.default().publicCloudDatabase
let pred = NSPredicate(value: true)
let query = CKQuery(recordType: "question", predicate: pred)
publicData.perform(query, inZoneWith: nil, completionHandler: {results, error in
if error != nil {
completion(.failure(error!))
} else {
var data = [Q]()
for result in results! {
let quest = result.object(forKey: "question_name") as! String
let a = result.object(forKey: "a") as! String
let b = result.object(forKey: "b") as! String
let c = result.object(forKey: "c") as! String
let d = result.object(forKey: "d") as! String
let answer = result.object(forKey: "answer") as! String
let category = result.object(forKey: "category") as! String
let final = Q(quest: quest, A:a, B: b, C: c, D: d, answer: answer, category: category)
data.append(final)
}
completion(.success(data))
}
})
}
调用函数
loadData { result in
switch result {
case .success(let data): print(data) // do something with the result
case .failure(let error): print(error)
}
}
我收到一个错误:“在尝试 return 数据数组时使用了未解析的标识符 'data'。我的代码列在下面。有人可以告诉我为什么会这样吗?
public func loadData()->[Q] {
let publicData = CKContainer.default().publicCloudDatabase
let pred = NSPredicate(value: true)
let query = CKQuery(recordType: "question", predicate: pred)
publicData.perform(query, inZoneWith: nil, completionHandler: ({results, error in
if(error != nil) {
print(error?.localizedDescription)
} else {
if results!.count > 0 {
var data = [Q]()
for result in results!{
let quest = result.object(forKey: "question_name") as! String!
let a = result.object(forKey: "a") as! String!
let b = result.object(forKey: "b") as! String!
let c = result.object(forKey: "c") as! String!
let d = result.object(forKey: "d") as! String!
let answer = result.object(forKey: "answer") as! String!
let category = result.object(forKey: "category") as! String!
let final = Q(quest: quest!, A:a!, B: b!, C: c!, D: d!, answer: answer!, category: category!)
data.append(final)
}
}
}
}))
return data
}
不!不!不!,永远不会使用sleep
解决异步任务!太可怕了。
为方便起见,使用
success
和failure
个案例和关联类型创建枚举enum Result { case success([Q]), failure(Error) }
在
loadData
returndata
或error
中完成处理程序。我删除了一堆多余的括号、感叹号和数组的空检查。在没有错误且没有匹配数据的情况下,Q
的空数组被 returned.public func loadData(completion: @escaping (Result)->() ) { let publicData = CKContainer.default().publicCloudDatabase let pred = NSPredicate(value: true) let query = CKQuery(recordType: "question", predicate: pred) publicData.perform(query, inZoneWith: nil, completionHandler: {results, error in if error != nil { completion(.failure(error!)) } else { var data = [Q]() for result in results! { let quest = result.object(forKey: "question_name") as! String let a = result.object(forKey: "a") as! String let b = result.object(forKey: "b") as! String let c = result.object(forKey: "c") as! String let d = result.object(forKey: "d") as! String let answer = result.object(forKey: "answer") as! String let category = result.object(forKey: "category") as! String let final = Q(quest: quest, A:a, B: b, C: c, D: d, answer: answer, category: category) data.append(final) } completion(.success(data)) } }) }
调用函数
loadData { result in switch result { case .success(let data): print(data) // do something with the result case .failure(let error): print(error) } }