我如何从 AlamoFire 退货?

Posted

技术标签:

【中文标题】我如何从 AlamoFire 退货?【英文标题】:How do I return something from AlamoFire? 【发布时间】:2015-04-04 23:33:40 【问题描述】:
import Foundation
import Alamofire
import UIKit
import SwiftyJSON

class APIClient: UIViewController 

    let loggedIn = false
    struct Constants
        static let Domain = "http://gogogo.com"
    

    func authenticate() -> Bool
        println("Authenticating")
        if let access_token = FBSDKAccessToken.currentAccessToken().tokenString 
            let parameters = [ "access_token": access_token ]
            Alamofire.request(.POST, Constants.Domain+"/accounts", parameters: parameters).responseJSON 
            (req, res, json, error) in
                if(error != nil) 
                    self.sendReturnToSplash()
                 else 
                    let json = JSON(json!)
                    println("\(json)")
                    return true //This doesn't work!!!!!!
                
            
        else
            println("No access token to authenticate")
        
    

    func sendReturnToSplash()
        let center = NSNotificationCenter.defaultCenter()
        let notification = NSNotification(name: NotificationCenters.ReturnToSplash, object: self, userInfo: ["":""])
        center.postNotification(notification)
    

如您所见,如果注销成功,我想返回“true”。但是,XCode 给了我一个“Void 不符合协议 BooleanLiteral”

【问题讨论】:

对函数使用完成块,看看是否注销成功。 【参考方案1】:

由于您使用的是异步调用,因此您应该将您的身份验证函数视为异步的。我建议使用类似于以下的完成块:

func authenticate(completion:(success: Bool) -> Void) 
    println("Authenticating")
    if let access_token = FBSDKAccessToken.currentAccessToken().tokenString 
        let parameters = [ "access_token": access_token ]
       Alamofire.request(.POST, Constants.Domain+"/accounts", parameters: parameters).responseJSON  (req, res, json, error) in
           if error != nil 
                self.sendReturnToSplash()
                completion(success: false)
             else 
                let json = JSON(json!)
                println("\(json)")
                completion(success: true)
            
        
     else 
        println("No access token to authenticate")
        completion(success: false)
    

【讨论】:

以上是关于我如何从 AlamoFire 退货?的主要内容,如果未能解决你的问题,请参考以下文章

AlamoFire 图像内存问题

发送 Alamofire JSON 数组 Swift

如何使用 Swift 5 在 Xcode 10.2.1 中添加 alamofire

请求 Alamofire

Swift 2.0 + Alamofire 3.0 - 缓慢加载 JSON

Alamofire 在 swift 2.2 中抛出错误