簡體   English   中英

在Alamofire POST請求中將數組作為參數發送

[英]Send an array as a parameter in a Alamofire POST request

我的應用程序當前正在使用AWS API Gateway和Alamofire來訪問充當我后端的不同lambda函數。

我需要將一個數組作為參數之一發送到其中一個API端點,因為我使用以下代碼:

        var interests : [String]
        interests = globalInterests.map({ (interest) -> String in
            return interest.id!
        })

        // Parameters needed by the API
        let parameters: [String: AnyObject] = [
            "name" : name,
            "lastName" : lastName,
            "interests" : interests
        ]


        // Sends POST request to the AWS API
        Alamofire.request(.POST, url, parameters: parameters, encoding: .JSON).responseJSON { response in

            // Process Response
            switch response.result {

            case .Success:

                print("Sucess")

            case .Failure(let error):
                 print(error)
            }
        }

但這是行不通的,因為API沒有識別數組,但是如果我創建了一個“靜態”數組

let interests = ["a", "b", "c"] 

一切都按照預期運作。

我如何解決這種情況,因為感興趣的數組來自代碼的另一部分,我應該如何聲明它或構造它?

一位朋友設法使用Android在Android中完成此操作

ArrayList<String>

編輯:

打印參數數組向我顯示:

["name":test, "interests": <_TtCs21_SwiftDeferredNSArray 0x7b05ac00>( 103, 651, 42), "lastName": test]

通過使用NSJSONSerialization來編碼JSON,您可以構建自己的NSURLRequest以在Alamofire中使用它,這是一個Swift 3示例:

    //creates the request        

    var request = URLRequest(url: try! "https://api.website.com/request".asURL())

    //some header examples

    request.httpMethod = "POST"
    request.setValue("Bearer ACCESS_TOKEN_HERE", 
                     forHTTPHeaderField: "Authorization")

    request.setValue("application/json", forHTTPHeaderField: "Accept")

    //parameter array

    let values = ["value1", "value2", "value3"]

    request.httpBody = try! JSONSerialization.data(withJSONObject: values)

    //now just use the request with Alamofire

    Alamofire.request(request).responseJSON { response in

        switch (response.result) {
        case .success:

            //success code here

        case .failure(let error):

            //failure code here
        }
    }
}

AnyObject只能表示類類型。 在Swift中,Array和Dictionary是struct,而不是許多其他語言中的類類型。 結構不能被描述為AnyObject,這就是Any進來的原因。除了類之外,Any也可以在所有其他類型中使用,包括struct和enum。

因此,每當我們輸入強制轉換數組或字典到AnyObject _TtCs21_SwiftDeferredNSArray時發生錯誤。所以我們必須使用Any而不是AnyObject。

    let parameters: [String: Any] = [
        "name" : name,
        "lastName" : lastName,
        "interests" : interests
    ]

問題是你剛剛聲明了數組而沒有初始化它。 即使你試圖插入數據,這也會使興趣數組為零。 試着寫

var interests = [String]()

代替

var interests : [String]

讓ValueArray = [“userid”:name,“password”:password]

pass ValueArray [parameters:ValueArray]也驗證API接受的編碼。

事實證明,數組中重復的ID存在問題。 API背后的代碼拋出了一個異常,它沒有作為錯誤發回。

所有其他答案都是正確的,我在找到問題后對它們進行了測試,一切正常,所以我要對它們進行投票。

非常感謝你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM