我是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
}
我该如何解决这个问题?什么是最好的做法'在swift2中用于定义函数?
谢谢
编辑1
我试图更改方法的签名,但错误仍在此处:
答案 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
}