2016-08-03 4 views
-1

内の関数の値を返すことができません:は、私は私がこれのために、関数からJSONを返すようにしようとしているスウィフト

func getAllItems() -> JSON { 
    Alamofire.request(.GET, Links.sharedInstance.getAllItems, encoding: .JSON).validate().responseJSON { (response) in 
     do { 
      let json = JSON(data: response.data!) 

      return json 
     } 
    } 
} 

を、それは私に次のエラー与える:どのようにすることができ

Unexpected non-void return value in void function 

をそれを修正する?私はfuncの内部でローカル変数を使ってみましたが、その場合はゼロを得ました。

ヒント?

+0

。あなたの関数にvar ret:JSON!と宣言してください。 「return json」を「ret = json」に置き換え、その後はレスポンスエリア外の「return re」 –

+1

@ルーカニコレッティNo.閉鎖から戻ることはできません。 OPはコールバックを使用する必要があります。 – Moritz

+0

@EricD私はクロージャから戻ってくるとは言わず、クロージャのvarに値を代入して後で返すように言ったが、レスポンスが十分に速くない場合はnull値が返され、あなたはタイトで、コールバックをよく使う –

答えて

0

あなたはこのように完了ハンドラを使用する必要があります:あなたは、応答領域ではなく、あなたの関数の領域にreturnステートメントを使用し

func getAllItems(completion:(json: JSON?) -> (Void)) { 
     Alamofire.request(.GET, Links.sharedInstance.getAllItems, encoding: .JSON).validate().responseJSON { (response) in 
      do { 
       let json = JSON(data: response.data!) 

       completion(json) 
      } 
     } 
    } 
関連する問題