Ios 循环从服务接收的阵列
来自服务的JSONIos 循环从服务接收的阵列,ios,arrays,swift,Ios,Arrays,Swift,来自服务的JSON { "firstname": "Utku", "lastname": "Dalmaz", "photos": [{ "src": "image", "post_id": "69" }, { "src": "image", "post_id": "74" }, { "src": "image", "post_id": "133" },
{
"firstname": "Utku",
"lastname": "Dalmaz",
"photos": [{
"src": "image",
"post_id": "69"
}, {
"src": "image",
"post_id": "74"
}, {
"src": "image",
"post_id": "133"
}, {
"src": "image",
"post_id": "142"
}]}
SWIFT代码
Alamofire.request("SERVICE", method: .post, parameters: parameters).validate().responseJSON { response in
switch response.result {
case .success:
if let json = response.result.value {
var success = 0
if let dictJSON = json as? [String: AnyObject] {
if let successInteger = dictJSON["success"] as? Int {
success = successInteger
if success == 1
{
self.firstname = dictJSON["firstname"] as! String
self.lastname = dictJSON["lastname"] as! String
if let photos = dictJSON["photos"] as! Array<String> {
let postID = //post_id data
let src = //src data
let data = InboxPhotos(ID: postID!, src: src!)
self.photosArr.append(data)
}
...
Alamofire.request(“服务”,方法:.post,参数:parameters).validate().responseJSON{response in
开关响应。结果{
成功案例:
如果让json=response.result.value{
var成功=0
如果让dictJSON=json为?[字符串:AnyObject]{
如果让successInteger=dictJSON[“success”]as?Int{
成功者
如果成功==1
{
self.firstname=dictJSON[“firstname”]作为!字符串
self.lastname=dictJSON[“lastname”]作为!字符串
如果让photos=dictJSON[“photos”]as!数组{
让postID=//post\u id数据
设src=//src数据
让数据=收件箱照片(ID:postID!,src:src!)
self.photosArr.append(数据)
}
...
我正在尝试从JSON服务获取数组数据。尽管我能够获取firstname和lastname数据,但我无法在swift代码中获取并循环数组
如何循环照片数组并将post_id和src数据放入InboxPhotos并附加到photosArr数组?我为您的JSON数据类型创建了JSON解析模式。您不需要任何东西,只需在创建模式对象时传递数据,就可以在不繁忙的情况下获取数据。
let dictJSON = ...
guard let photos = dictJSON?["photos"] as? [[String: Any]] else { return }
let list = photos.map { InboxPhotos(ID: $0["post_id"] as! String, src: $0["src"] as! String)}
// Or more safely.
let list2: [InboxPhotos] = photos.compactMap {
guard let src = $0["src"] as? String,
let id = $0["post_id"] as? String else {
return nil
}
return InboxPhotos(ID: id, src: src)
}
struct UserModal{
var firstname:String
var lastname:String
var photos: [PhotosModal]
init(dictData:[String: Any]) {
self.firstname = dictData["firstname"] as? String ?? ""
self.lastname = dictData["lastname"] as? String ?? ""
var photosArr = [PhotosModal]()
for data in dictData["photos"] as? [[String:Any]] ?? [] {
photosArr.append(PhotosModal(src: data["src"] as! String, post_id: data["post_id"] as! Int))
}
self.photos = photosArr
}
}
struct PhotosModal{
var src:String
var post_id:Int
init(src:String, post_id:Int) {
self.src = src
self.post_id = post_id
}
}
let userModal = UserModal(dict: dictJSON?["photos"] as? [[String: Any]])
因此,请为该模式文件创建单独的文件。应用该文件,您将遵循单一责任类/文件的SOLID主要规则。,因为它不是字符串数组。它是字典数组。请尝试dictJSON[“photos”]as![[String:String]]或dictJSON[“photos”]作为!Array@TejaNandamuri条件绑定的初始值设定项必须具有可选类型,而不是“[[String:String]]'你的帖子似乎没有包含明确的问题。预期结果是什么?@Ferdz我编辑了我的问题。谢谢你应该使用Codable for JSON,如果你只是粘贴样本数据,你可以让quicktype.io为你编写代码(注意选项)。然后我应该执行self.photosArr.append(列表2)?var photosArr:[InboxPhotos]=[InboxPhotos]()No.photosArr.removeAll()photosArr.append(contentsOf:list)//或仅photosArr=list