在函数内部抛出错误,但不在外部

Throwing error inside function, but not outside

我一直在使用 dbconnect 函数中的常量和变量来允许直接访问我的核心数据变量。

当我输入这样的代码时,它起作用了:

    @IBAction func createNewGame(sender: AnyObject) {
    let entityDescription = NSEntityDescription.entityForName("StudioData", inManagedObjectContext: managedObjectContext!)
    let studioData = StudioData(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext)
    var error: NSError?
    managedObjectContext?.save(&error)
    if let err = error {
        println(err.localizedFailureReason)
    } else {
        println("Studio Created")
    }
    studioData.studioname = studioNameText.text
    studioData.execFirstName = firstNameText.text
    studioData.execLastName = lastNameText.text
}

但是当它变成这样的时候 returns "Unresolved identifier studioData"

    @IBAction func createNewGame(sender: AnyObject) {
    dbconnect()
    studioData.studioname = studioNameText.text
    studioData.execFirstName = firstNameText.text
    studioData.execLastName = lastNameText.text
}

func dbconnect () {
    let entityDescription = NSEntityDescription.entityForName("StudioData", inManagedObjectContext: managedObjectContext!)
    let studioData = StudioData(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext)
    var error: NSError?
    managedObjectContext?.save(&error)
    if let err = error {
        println(err.localizedFailureReason)
    } else {
        println("Studio Created")
    }

}

我正在尝试将代码放入函数中以减少不同函数之间的重复。

我错过了什么?

错误是说变量 studioData 没有在 createNewGame(sender:) 中定义。由于您想使用 dbconnect() 的结果,我建议将创建的对象传回给调用者。有很多方法可以做到这一点,但这里有一个:

@IBAction func createNewGame(sender: AnyObject) {
    var studioData = dbconnect()
    studioData.studioname = studioNameText.text
    studioData.execFirstName = firstNameText.text
    studioData.execLastName = lastNameText.text
}

func dbconnect () -> StudioData {
    let entityDescription = NSEntityDescription.entityForName("StudioData", inManagedObjectContext: managedObjectContext!)
    let studioData = StudioData(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext)
    var error: NSError?
    managedObjectContext?.save(&error)
    if let err = error {
        println(err.localizedFailureReason)
    } else {
        println("Studio Created")
    }
    return studioData
}