![](/img/trans.png)
[英]“Type 'Any' has no subscript members” error on Alamofire 4.0
[英]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.