gpt4 book ai didi

swift - 在另一个函数中使用一个函数的输出?

转载 作者:行者123 更新时间:2023-11-30 12:50:50 25 4
gpt4 key购买 nike

我有一个获取请求,我想使用结果来通知其他函数。获取的是

   func getExercises() {

guard let managedObjectContext = managedObjectContext else { return }
let userExercise = UserExercise(context: managedObjectContext)

let request: NSFetchRequest<UserExercise> = UserExercise.fetchRequest()
request.predicate = NSPredicate(format: "usersroutine == %@", self.routineName)
do {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let queryResults = try context.fetch(request)
print ("num of results = \(queryResults.count)")
for exercise in queryResults as [NSManagedObject] {
print("Exercise NAME: \(exercise.value(forKey: "name"))")
}
} catch {
print("Error with request: \(error)")
}

其他功能是(在 id 希望输出的位置添加大写字母):

    func configure(_ cell: TodaysRoutineTableViewCell, at indexPath: IndexPath) {
let userExercise = THE GET EXERCISE FUNCTIONS OUTPUT(at: indexPath)

还有另一个:

    fileprivate func updateView() {
var hasUserExercises = false
if let UserExercise = THE GET EXERCISE FUNCTIONS OUTPUT {
hasUserExercises = UserExercise.count > 0
}

我想也许 id 只是在其中添加 queryResults 就可以了,但由于那是该函数的本地函数,所以我只会收到错误。实现这一目标的正确方法是什么?

已更新以显示错误图像

enter image description here

    // MARK: - COREDATA FETCH

func getExercises(completion: (([NSManagedObject]?, NSError?) -> Void)?) {

guard let managedObjectContext = managedObjectContext else { return }
let userExercise = UserExercise(context: managedObjectContext)

let request: NSFetchRequest<UserExercise> = UserExercise.fetchRequest()
request.predicate = NSPredicate(format: "usersroutine == %@", self.routineName)

do {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext

let exercises: [NSManagedObject]?

do {
let queryResults = try context.fetch(request)
print(queryResults)

for exercise in queryResults as [NSManagedObject] {
print("Exercise NAME: \(exercise.value(forKey: "name"))")
}
completion(exercises, nil)

} catch {
print("Error with request: \(error)")
completion(exercises, error)
}
}
}

最佳答案

  1. Use of unresolved identifier 'exercises'

根据您在图像中显示的代码,您第一个错误的原因是,您使用了尚未声明的属性exercisescompletion 闭包参数中的 exercises 将无法在该函数中访问。它是一个需要传递给该闭包的参数。

当您调用完成 block 时,您必须将一个 NSManagedObject 数组传递给它,该数组是您在获取结果后构造的。在您的情况下,在 for..in 循环中构造一个数组,并在该循环之后调用完成 block 。

let exercises: [NSManagedObject]?

do {
let queryResults = try context.fetch(request)
print(queryResults)

for exercise in queryResults as [NSManagedObject] {
//Using the result, build the exercises array here
}

completion(exercises, nil)
} catch {
print("Error with request: \(error)")
completion(exercises, error)
}
  1. Nil is not compatible with expected argument type '[NSManagedObject]'

这是因为 exercises 参数不是可选的,但您将 nil 传递给它。您必须将exercises参数设为可选,才能同时采用非nil和nil值。将您的方法签名更改为以下内容:

func getExercises(completion: ((exercises: [NSManagedObject]?, error: NSError?) -> Void)?)

注意:确保在传递给 getExercises 函数的完成闭包中正确处理 nil

关于swift - 在另一个函数中使用一个函数的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41000216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com