新Swift类中void函数中的意外非void返回值

时间:2016-07-19 22:40:16

标签: ios swift xcode

我刚刚开始学习面向对象,我已经开始编写一个用户类,它有一个计算用户与对象距离的方法。它看起来像这样:

class User{
    var searchRadius = Int()
    var favorites : [String] = []
    var photo = String()
    var currentLocation = CLLocation()

    func calculateDistance(location: CLLocation){
        let distance = self.currentLocation.distanceFromLocation(location)*0.000621371
        return distance //Error returns on this line
    }
}

在上面标记的行中,我收到以下错误:

(!) Unexpected non-void return value in void function

我已经在别处找了解决方案,但似乎无法找到适用于此实例的任何内容。我在其他地方使用了distanceFromLocation代码,并且它工作正常,所以我不确定在这种情况下使用的是什么不同。

感谢您的帮助!

2 个答案:

答案 0 :(得分:27)

您在方法标题中缺少返回类型。

func calculateDistance(location: CLLocation) -> CLLocationDistance {

看起来我的答案看起来是次要的重复,所以有些补充。

声明没有返回类型的函数(在这种情况下包括方法)被称为void函数,因为:

func f() {
    //...
}

相当于:

func f() -> Void {
    //...
}

通常,您无法从此类void函数返回任何值。 但是,在Swift中,你只能返回一个值(我不确定它可以被称为"值"),"无效值"由()代表。

func f() {
    //...
    return () //<- No error here.
}

现在,您可以理解错误消息的含义:

  

void函数中的意外非void返回值

您需要更改返回值,或者将返回类型Void更改为其他类型。

答案 1 :(得分:2)

您的函数calculateDistance未指定返回值。这意味着它不会返回任何东西。

但是,您有一行return distance,其中 会返回一个值。

如果你希望你的函数返回一个距离,你应该这样声明:

func calculateDistance(location: CLLocation) -> CLLocationDistance
{
  //your code
  return distance
}