swift 尝试保存到核心数据的try catch中缺少return语句

x7rlezfr  于 2022-11-28  发布在  Swift
关注(0)|答案(1)|浏览(113)

在我下面的swift代码中,目标是使用一个helper方法将字符串保存到核心数据中。我正在尝试使用一个try和catch系统。我在catch段后收到一个错误消息,说在预期返回'[Info]?'的示例方法中缺少return。我不知道该用什么作为return语句

import UIKit;import CoreData

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        DataBaseHelper.shareInstance.saveText("Jessica")
        
        
        DataBaseHelper.shareInstance.saveText("ashley")
    }

}

class DataBaseHelper {
    
    private class func getContext() -> NSManagedObjectContext {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
    
        return appDelegate.persistentContainer.viewContext
    }
    
    
    static let shareInstance = DataBaseHelper()
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    
    func saveText(_ string: String) -> [Info]? {
        let imageInstance = Info(context: context)
        imageInstance.txt = string
        do {
            try context.save()
            
            
        } catch{
       
        }
        
    }
  
    

class func fetchObject() -> [Info]?
{   
    let context = getContext()
    var user : [Info]? = nil
    do {
        user = try context.fetch(Info.fetchRequest())
        
        return user
        
    } catch {
        return user
    }
    
}

    
   
}
nzk0hqpo

nzk0hqpo1#

将saveText函数的定义更改为以下内容。

func saveText(_ string: String) {
    let imageInstance = Info(context: context)
    imageInstance.txt = string
    do {
        try context.save()
    } catch let err {
        print(err.localizedDescription)
    }
    
}

由于不需要从该函数返回任何内容,因此可以删除返回类型
或者,如果确实需要返回类型以供将来使用,请将其设置为如下所示,以便在出现错误时返回nil

func saveText(_ string: String) -> Info? {
    let imageInstance = Info(context: context)
    imageInstance.txt = string
    do {
        try context.save()
        return imageInstance
    } catch{
        return nil
    }
    
}

我建议您不要这样做,因为您已经从上下文创建了一个对象,这意味着即使在保存上下文时出现错误,工作副本也可以包含您创建的数据。这会产生不必要的问题,因为您会看到数据存在,但数据不会被保存。

相关问题