2016-07-19 72 views
2

私はObject Orientedについて学び始めました。オブジェクトからの距離を計算するメソッドを持つユーザークラスを作成し始めました。私は解決策のために他の場所で見てきたが、適用される何かを見つけるように見えることはできません新しいSwiftクラスのvoid関数の予期せぬ非void戻り値

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

:私は次のエラーを取得する、上記マークされた行で

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 
    } 
} 

:それはこのようになりますこのインスタンスに。私はdistanceFromLocationコードを他の場所で使用していますが、うまくいきましたので、この場合の使用方法の違いはわかりません。

ありがとうございました!

+0

これは、返されるはずのないcompletionHandlerからの戻り値でもある可能性があります。 [この回答](https://stackoverflow.com/questions/32121108/unexpected-non-void-return-value-in-void-function-swift-2-0) – Honey

答えて

14

あなたの方法ヘッダーで戻り値の型が欠落しています。

func calculateDistance(location: CLLocation) -> CLLocationDistance { 

一見私の答えは劣るが重複するので、いくつかの追加として見えます。通常

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

、あなたが任意の値を返すことができない:に

func f() { 
    //... 
} 

は等価です:ので、(この場合には、方法を含む)

機能は、無効関数として呼ばれている戻り値の型なしで宣言しましたそのようなボイド関数から。 しかし、Swiftでは、1つの値だけを返すことができます(私はそれを "値"と呼ぶことはできません)。 "void value"は()です。

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

さて、あなたは、エラーメッセージの意味を理解することができます

unexpected non-void return value in void function

あなたは、戻り値を変更したり、他のいくつかの他のタイプに戻り値の型Voidを変更する必要があります。

2

関数calculateDistanceは戻り値を指定しません。つまり、何も返さないということです。

ただし、return distanceという行があり、です。

あなたの関数が距離を返すようにしたい場合は、このようにそれを宣言する必要があります。

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

ありがとう!それはすぐにそれを解決しました。 –

+0

答えの1つを受け入れる必要があります。そして、Apple Swift iBookを読んでください。関数と戻り値を非常にはっきりとカバーしています。 –

関連する問題