簡體   English   中英

錯誤:類型“ Any”沒有下標成員帶有Swift 4的AlamoFire

[英]Error: Type 'Any' has no subscript members AlamoFire with Swift 4

我已經嘗試了很多解決方案,但都沒有運氣。 我正在嘗試傳遞json數據並返回用戶值。

模型:

import Foundation

class UserModel: NSObject {

var UserID: String!
var Name: String!

init(UserID: String, Name: String) {
    super.init()

    self.UserID = UserID
    self.Name = Name

}
}

提取功能:

    guard let url = URL(string: "https://api.com/api.php?PatientList") else { return }
    var request = URLRequest(url: url)

    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Accept")
    request.httpMethod = "POST"

    let pinPost = "&Token=\(token)"
    request.httpBody = pinPost.data(using: .utf8)

    Alamofire.request(request).responseJSON { (response) in
        if let dict = response.result.value as? Dictionary<String, AnyObject> {
            if let datas = dict["Data"] as? NSArray {
                for data in datas {

                    let users = UserModel(UserID: data["PatientID"], Name: data["DisplayName"])

                }
            }
        }
    }

我收到Type 'Any' has no subscript members的錯誤消息, Type 'Any' has no subscript members以前的解決方案都無效,我無法弄清楚。

圖片

 ["Response": 1, "Data": <__NSSingleObjectArrayI 0x600002624ae0>(
 <__NSArrayI 0x600002455f60>(
 {
DOB = "09/08/1987";
DisplayName = "Jesse Gray";
PatientID = "1575da84-864f-11e8-9bae-02bd535e30bc";
}

你需要

if let datas = dict["Data"] as? [[String:Any]] {

代替

if let datas = dict["Data"] as? NSArray {

因為數組元素的類型為Any ,因此不能在此處訂閱data["PatientID"]data["DisplayName"]

Alamofire.request("request").responseJSON { (response) in
    if let dict = response.result.value as? [String:Any] {
        if let datas = dict["Data"] as? [[String:Any]] {
            for data in datas {
                if let id = data["PatientID"] as? Int , let name = data["DisplayName"] as? String {
                  let users = UserModel(UserID:id, Name: name)
                } 
            }
        }
    }
}

還考慮使用Codable解析響應

struct Root: Codable {
    let data: [UserModel]
    enum CodingKeys: String, CodingKey {
       case data = "Data"
    }
}

struct UserModel: Codable {
    let patientID: Int
    let displayName: String

    enum CodingKeys: String, CodingKey {
        case patientID = "PatientID"
        case displayName = "DisplayName"
    }
}

Alamofire.request("request").responseData{ (response) in
    if let data = response.data  {

        do {
            let res = try JSONDecoder().decode(Root.self, from: data)
            print(res.data)
        }
        catch {
            print(error)
        }
    }
}

正確的是

{“ Data”:[{“ DisplayName”:“ Jerry Smith”,“ DOB”:“ 09/08/1987”}]}

暫無
暫無

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

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