2016-06-22 32 views
0

これは簡単な質問です。コードでわかるように、すべてのケースでリターンがあります。しかし、何とかxcodeはrefresh()completionHandlerブロックのリターンを認識しません。関数に戻り値がありません

提案がありますか?

func accessTokenWithBearer() -> String { 
      if !didTokenExpire() { 
       return "Bearer \(accessToken!)" 
      }else{ 
       Token.refresh({ 
        return "Bearer \(self.accessToken!)" 
       }) 
      } 
    } 

    class func refresh(completion:()->()){ 
     completion() 
    } 
+5

'Token.refresh'内の' return'は、関数ではなくブロックから戻ります。関数は、非同期呼び出しの補完ハンドラの内部から値を返すことはできません。 – dan

+0

私は参照してください。その後、ブロックを更新するのを待ってから、トークンを返すことができますか? – Faruk

+3

あなたの関数は 'refresh'関数のように補完ハンドラをパラメータとして受け取り、それを返す代わりに呼び出します。 – dan

答えて

3

前述のように、accessTokenWithBearer関数に補完ハンドラを追加する必要があります。

func accessTokenWithBearer(completion: String ->()) { 
    if !didTokenExpire() { 
     completion("Bearer \(accessToken!)") 
    }else{ 
     Token.refresh({ 
      completion("Bearer \(self.accessToken!)") 
     }) 
    } 
} 

補完ハンドラと戻り値の両方を持つこともできます。

func accessTokenWithBearer(completion: String ->()) -> String? { 
    if !didTokenExpire() { 
     return "Bearer \(accessToken!)" 
    }else{ 
     Token.refresh({ 
      completion("Bearer \(self.accessToken!)") 
     }) 
     return nil 
    } 
} 
関連する問題