http에서 alamofire 및 SwiftlyJSON을 사용하여 샘플 JSON 객체를 구문 분석하려고하면 내 제품 모델로 구문 분석하는 데 문제가있었습니다. 정말 이상합니다. for 루프 내에서 디버거를 실행하고 "po self.productlist"를 반복하고 수행합니다. 값이 실제로 배열에 추가되었습니다. 하지만 루프 외부에서 인쇄하려고하면 작동하지 않습니다. 디버거 모드에서 "po self.productlist [0] ["product "]"를 수행하려고 할 때도 마찬가지입니다. 한때 작동하는 것은 정말 이상합니다. 보시다시피 아래 이미지 링크에 2 개의 이미지를 첨부했습니다.
컨트롤러와 모델도 첨부했는데, 제가 어떤 실수를했는지 잘 모르겠거나 버그가있을 수 있습니다. 어떤 도움을 주시면 감사하겠습니다. 감사
제어 장치
import UIKit
import Alamofire
import SwiftyJSON
class AddProductController: UITableViewController {
var productlist = [Product]()
override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request("https://api.myjson.com/bins/1f1zop").responseJSON { response in
let jsondata = JSON(data: response.data!)
for index in 0..<jsondata["data"].count{
self.productlist.append(Product(id: jsondata["data"][index]["id"].stringValue, product: jsondata["data"][index]["product"].stringValue, category: jsondata["data"][index]["category"].stringValue, price: jsondata["data"][index]["price"].doubleValue))
}
}
print(self.productlist[0]["id"])
모델
import Foundation
class Product {
var id:String
var product:String
var category: String
var price: Double
init(id:String, product:String, category:String, price:Double) {
self.id = id
self.product = product
self.category = category
self.price = price
}
}
] 2
vadian 업데이트 감사합니다!
버그가 없습니다 . 유명한 async-trap 입니다.
Alamofire 요청은 JSON이 반환됩니다 비동기 작동 후print
라인.
print
라인과 배열을 처리하는 코드를 완료 블록에 넣으십시오 .
id
사전처럼 얻으려고하기 때문에 오류가 발생합니다 . 속성 사용.id
그건 그렇고 : Swift에서 인덱스 기반 루프를 사용하지 마십시오
Alamofire.request("https://api.myjson.com/bins/1f1zop").responseJSON { response in
let jsondata = JSON(data: response.data!)
for product in jsondata["data"].array! {
self.productlist.append(Product(id: product["id"].stringValue, product: product["product"].stringValue, category: product["category"].stringValue, price: product["price"].doubleValue))
}
print(self.productlist[0].id) // use the property, it's not a dictionary.
}
참고 : JSON이 타사 서비스에서로드되는 경우 선택적 바인딩을 사용하여 데이터를 안전하게 파싱해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다