홈>
URL을 사용하여 Flickr의 공개 피드에서 JSON을 사용하고 싶습니다
https://api.flickr.com/services /feeds/photos_public.gne?nojsoncallback=1&format=json
Alamofire를 사용하여 JSON을 사용한 다음 ObjectMapper를 사용하여 JSON을 기본 사진 데이터 모델에 매핑하려고합니다.
내가 가진 문제는 JSON을 구문 분석 한 다음 매핑 할 수 없다는 것입니다.
objects = Mapper<Photo>().mapArray(JSONArray: json)!
반환 :
Cannot convert value of type 'JSON' to expected argument type '[[String : Any]]'
내 코드는 다음과 같습니다;
FlickrAPI.executeRequestURL(url, parameters: parameters) { (success, error, response) in
if (success) {
//print ("Response: \(response)")
if let jsonObject = response?.result.value {
let json = JSON(jsonObject)
objects = Mapper<Photo>().mapArray(JSONArray: json)!
}
}
else {
print ("** Error -- \(error?.localizedDescription) **")
taskCallback(false, error)
}
}
// Execute URL request code:
static func executeRequestURL(_ requestURL: URL, parameters:[String: String], taskCallback: @escaping (Bool, Error?, DataResponse<Any>?) -> ())
{
print ("Attempting URL -- \(requestURL)")
Alamofire.request(requestURL, parameters:["nojsoncallback": "1", "format": "json"])
.validate(statusCode: 200..<300)
.validate(contentType: ["application/json"])
.responseJSON { response in
switch(response.result) {
case .success(_):
taskCallback(true, nil, response)
break
case .failure(_):
print("Error while fetching url: \(response.result.error)")
taskCallback(false, response.result.error, nil)
break
}
}
}
// Photo model
final class Photo: Object, Mappable {
private(set) dynamic var uuid: String = UUID().uuidString
dynamic var name: String = ""
dynamic var author_id: String = ""
dynamic var title: String = ""
override public static func primaryKey() -> String? {
return "uuid"
}
required convenience public init?(map: Map) {
self.init()
}
// MARK: - ObjectMapper protocol methods
public func mapping(map: Map) {
self.name <- map["name"]
self.author_id <- map["author_id"]
self.title <- map["title"]
}
사진 공개 URL을 검토 할 때 응답에 사진 객체가
"items":
라는 배열로 함께 정렬되어 있음을 알 수 있습니다.
AlamofireObjectMapper
를 사용할 수 있다는 것을 읽었습니다.
돕기 위해;그러나 실제로 사용하는 방법에 대해 혼란스러워합니다.
items
를 어떻게 소비합니까?
ObjectMapper를 사용하여 Flickr 퍼블릭 사진 피드 내의 배열?
많은 감사합니다
- 답변 # 1
AlamofireObjectMapper를 사용하여이 문제를 해결할 수있었습니다
먼저, 응답을 다시받을 클래스를 만듭니다. 둘째,이 클래스가 매핑을 준수하는지 확인하십시오;
그런 다음 실행 URL을 호출 할 때이 클래스에 맞게 약간 변경합니다.
여기 중요한 부분은
response: DataResponse<PhotoResponse>) in
입니다 줄.마침내
fetchPublicPhotos
를 통해 호출 할 때 함수 결과를 다시 조회 할 수 있습니다