1. ホーム
  2. ios

[解決済み] 新しい Swift クラスの void 関数で予期しない非 void の戻り値が発生する。

2022-02-04 15:03:02

質問

私はオブジェクト指向について学び始めたばかりで、あるオブジェクトからのユーザーの距離を計算するメソッドを持つユーザークラスを書き始めました。 それは次のようなものです。

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では、1つの値("value"として呼び出せるかどうかわからない)、"void value" で表されるものを返すことができます。 () .

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

これで、エラーメッセージの意味を理解することができます。

<ブロッククオート

void関数で予期しない非void戻り値

戻り値を変更するか、戻り値の型を変更する必要があります。 Void を他の型に変更してください。