“元组类型的值'(字符串,JSON)'没有成员'下标'”在Xcode中引用了什么?

时间:2018-02-05 22:30:04

标签: swift xcode core-data alamofire swifty-json

因此,对于我的文件,我尝试使用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转换这些网络方法。

1 个答案:

答案 0 :(得分:0)

for url in photoArray

我想这里url并不总是字典,在你的情况下你得到一个元组(value1,value2),显然你不能通过下标语法访问元组中的参数。

您需要检查JSON响应并在映射func

中进行一些调整