Подтвердить что ты не робот

SWIFT ERROR Неоднозначная ссылка на индекс участника '

Я новичок в кодировании и взял проект с открытым исходным кодом, чтобы получить эту идею. Надеюсь, вы, ребята, можете помочь мне исправить это.

    let pictures = ( selectedRestaurant["Pictures"] as! NSArray ) //Here where i get the error

    let picture = ( pictures[zoomedPhotoIndex] as! NSDictionary )

    let pictureURL = picture["url"] as! String

    let imageURL = NSURL(string: pictureURL)
    let urlRequest = NSURLRequest(URL: imageURL!)
    NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue()) {
        response, data, error in
        if error == nil && data != nil {

            self.imageView.image = UIImage(data: data!)
            self.imageView.contentMode = UIViewContentMode.ScaleAspectFit

        }
    }

}

}
4b9b3361

Ответ 1

Просто укажите явно, что такое тип pictures:

Итак, вместо:

let pictures = selectedRestaurant["Pictures"] as! NSArray

Запись:

let pictures: NSArray = selectedRestaurant["Pictures"] as! NSArray

Ответ 2

Для меня ответ заключался в том, чтобы конкретно указать тип массива, который я использовал для:

if let foo = dictionary["bar"] as? [String]

Ответ 3

Это означает, что "Картинки" не являются допустимым индексом. Похоже, вы создаете константу с именем pictures, и вы пытаетесь присвоить ей значение selectedRestaraunt["Pictures"], а затем пытаетесь использовать ее как NSArray. Если selectedrestaraunt уже является массивом, то то, что находится в скобках [] после selectedrestaraunt, должно быть целочисленным значением, которое будет ссылаться на индекс в массиве selectedrestaraunt. Obviosuly "Картинки" не является целым числом, это строка.

Если вы пытаетесь получить доступ к массиву в массиве. Значение pictures - это массив, хранящийся в массиве selectedrestaraunt, тогда вы можете получить к нему доступ, используя selectedRestaraunt[index of Pictures array], где [index of pictures array] - целое число, которое равно номеру индекса, в котором массив Picutres находится в пределах selectedrestaraunt массив

Ответ 4

Как упоминал Эрик и Юджин в своих комментариях, невозможно рассмотреть вопрос, который у вас есть, не зная тип selectedRestaurant. В конце концов, почему вы получаете ошибку неоднозначности компилятора.

Я должен уважительно не соглашаться с MikeG. Проблема не в одном действительном индексе. Вы получили бы такую ​​ошибку, если, например, у вас был тип selectedRestaurant [NSNumber:AnyObject], где явно String больше не действует, поскольку ключ словаря может быть только NSNumber.

Ответ 5

Мне удалось получить эту ошибку несколько странным образом. У меня был код вроде этого:

        cell.textLabel = anArrayOfStrings[indexPath.item].uppercased()

И я был в тупике, почему он не мог понять, что это массив, хотя я очень четко заявлял его тип. Я сломал строку пополам и, наконец, получил полезное сообщение об ошибке:

        let name = anArrayOfStrings[indexPath.item].uppercased()
        cell.textLabel = name

Я пытался назначить String для UILabel, но почему-то точка, в которой был остановлен движок вывода типа, находилась в индексе.

Итак, мой совет любому, кто превзошел это, - попытаться разбить ваше выражение на куски размером с укусом, чтобы механизм вывода типа Swift мог легче усвоить.