неожиданное возвращаемое значение Non-void в функции void в новом классе Swift

Я только начинаю изучать объектно-ориентированный, и я начал писать пользовательский класс, который имеет метод вычисления расстояния пользователя от объекта. Выглядит это так:

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 ответов


в заголовке метода отсутствует тип возврата.

func calculateDistance(location: CLLocation) -> CLLocationDistance {

по-видимому, мой ответ выглядит как подчиненный дубликат, поэтому некоторое дополнение.

функции (включая методы, в этом случае), объявленные без возвращаемых типов, называются функцией void, потому что:

func f() {
    //...
}

эквивалентно:

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

обычно вы не можете вернуть значение из таких функций void. Но в Swift вы можете вернуть только одно значение (я не уверен, что это возможно называться "value"), "void value", представленное ().

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

теперь вы можете понять значение сообщения об ошибке:

неожиданное возвращаемое значение Non-void в функции void

вам нужно изменить возвращаемое значение, или изменить тип возвращаемого Void к какому-то другому типу.


ваша функция calculateDistance не указывает возвращаемое значение. Это значит, что он ничего не возвращает.

однако, у вас есть строка return distance, который is возврат значения.

Если вы хотите, чтобы ваша функция возвращала расстояние, вы должны объявить ее следующим образом:

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