Swift2:返回一个可选的类型对象

时间:2015-11-20 10:01:31

标签: swift swift2 optional

我是swift2世界的新手,我目前正在努力解决一个简单的问题:

// Get all moves for the first category
func getMuscles() -> BodyPart {

        let bpart:BodyPart?

        if let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext {
            do{
                let fetchRequest = NSFetchRequest(entityName: "BodyPart")
                let fetchResults = try managedObjectContext.executeFetchRequest(fetchRequest) as! [BodyPart]
                bpart = fetchResults[0]
            } catch let error as NSError  {
                print(error)
                bpart = nil
            }
        }
        return bpart
}

function in swift2

我该如何解决这个问题?什么是最好的做法'在swift2中用于定义函数?

谢谢

编辑1

我试图更改方法的签名,但错误仍在此处:

enter image description here

4 个答案:

答案 0 :(得分:3)

你应该问自己的问题是func getMuscles() -> BodyPart?是否必须总是返回一个对象,或者它是否可以返回一个零。

通过将方法签名更改为getMuscles(), 你基本上声明可以从该方法返回一个nil, 从而解决您的即时编译时间问题。

在该特定上下文中,因为您从CoreData获取对象, 允许?返回nil可能是明智之举。

您定义函数的方式(如果它们返回选项{{1}})完全取决于调用代码。

答案 1 :(得分:1)

回来:

func getMuscles() -> BodyPart? { }

答案 2 :(得分:1)

将您的方法签名更改为:     func getMuscles() - >身体的一部分?

但是在调用this函数时解开返回值时要小心。

答案 3 :(得分:1)

与SWIFT2没有任何关系。返回类型期望某些值BodyPart不是可选值BodyPart? ...但是您要返回一个可选值bpart

func getMuscles() -> BodyPart {

        let bpart:BodyPart?

      ....
        return bpart
}

如果要按原样返回bpart,则需要将返回类型创建为可选

func getMuscles() -> BodyPart? {

        let bpart:BodyPart?

      ....
        return bpart
}

或者如果你想只返回值,试试这个

func getMuscles() -> BodyPart {

        let bpart:BodyPart = ()//initialize here dont make optional

      ....
        return bpart
}