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

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

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代码,并且它运行正常,所以我不确定在这种情况下的用法有什么不同。

谢谢你的帮助!

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

 func calculateDistance(location: CLLocation) -> CLLocationDistance { 

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

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

 func f() { //... } 

相当于:

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

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

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

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

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

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

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

但是,您有一个行return distance ,它返回一个值。

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

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