因此,对于我的文件,我尝试使用Alamofire提出请求,以便使用他们的API从Flickr获取照片。
我正在使用CoreData,Alamofire和SwiftyJSON
方法如下:
func getImagesFromFlickr(_ selectedPin: Pin, _ page: Int, _ completionHandler: @escaping (_ result: [Photo]?, _ error: NSError?) -> Void) {
/* Set Parameters */
let methodParameters: [String:String] = [
Constants.FlickrParameterKeys.Method: Constants.FlickrParameterValues.SearchMethod,
Constants.FlickrParameterKeys.APIKey: Constants.FlickrParameterValues.APIKey,
Constants.FlickrParameterKeys.BoundingBox: bboxString(longitude:selectedPin.longitude , latitude: selectedPin.latitude),
Constants.FlickrParameterKeys.Latitude: "\(selectedPin.latitude)",
Constants.FlickrParameterKeys.Longitude: "\(selectedPin.longitude)",
Constants.FlickrParameterKeys.PerPage: "21",
Constants.FlickrParameterKeys.Page: "\(page)",
Constants.FlickrParameterKeys.SafeSearch: Constants.FlickrParameterValues.UseSafeSearch,
Constants.FlickrParameterKeys.Extras: Constants.FlickrParameterValues.MediumURL,
Constants.FlickrParameterKeys.Format: Constants.FlickrParameterValues.ResponseFormat,
Constants.FlickrParameterKeys.NoJSONCallback: Constants.FlickrParameterValues.DisableJSONCallback
]
/* Build the URL */
let url = flickrURLFromParameters(methodParameters)
/* Make the request with Alamofire */
Alamofire.request(url).validate(statusCode: 200..<300).responseJSON { (response) in
if response.result.isSuccess {
print("Success! Got the Images from Flickr!")
let flickrJSON : JSON = JSON(response.result.value!)
print(flickrJSON)
let photosDict = flickrJSON["photos"]
let photoArray = photosDict["photo"]
performUIUpdatesOnMain {
let context = CoreDataStack.getContext()
var imageUrlString = [Photo]()
for url in photoArray {
let urlString = String(url[Constants.FlickrResponseKeys.MediumURL])
let photo : Photo = NSEntityDescription.insertNewObject(forEntityName: "Photo", into: context ) as! Photo
photo.urlString = urlString
photo.pin = selectedPin
imageUrlString.append(photo)
CoreDataStack.saveContext()
}
completionHandler(imageUrlString, nil)
}
} else {
print("Error: \(String(describing: response.result.error))")
}
}
}
错误在这行代码中:
let urlString = String(url[Constants.FlickrResponseKeys.MediumURL])
我在Xcode中遇到这个错误,说“元组类型的值'(字符串,JSON)'没有成员'下标'”
我非常感谢您收到此错误的原因。 此外,我们非常感谢有关如何更好地实施此方法的任何建议。
如果您想看一下我的项目,那就是名为“Networking-with-Alamofire”的分支机构
链接在这里: https://github.com/RobertoEfrainHernandez/Virtual-Tourist-Udacity/tree/Networking-with-Alamofire
如果您查看主分支,我使用URLSessions完成了我的网络代码,而我与Networking-with-Alamofire分支的目标是使用Alamofire和SwiftyJSON转换这些网络方法。
答案 0 :(得分:0)
for url in photoArray
我想这里url
并不总是字典,在你的情况下你得到一个元组(value1,value2),显然你不能通过下标语法访问元组中的参数。
您需要检查JSON响应并在映射func
中进行一些调整