2016-01-25 3 views
21

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

let pictures = (selectedRestaurant["Pictures"] as! NSArray) //Here's 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 

     } 
    } 

} 

} 
+0

Покажите нам, как объявлен 'selectedRestaurant' и каков его тип. – Moritz

+2

Как объявляется 'selectedRestaurant'? Из кода, который вы опубликовали, мы не знаем тип и/или данные, которые вы храните в этом var. Кроме того, остальная часть вашего кода, где вы загружаете изображение из URL-адреса, не имеет индекса. –

ответ

1

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

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

0

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

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

9

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

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

Это то, что мне тоже нужно. Благодаря! – mondousage

13

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

Таким образом, вместо:

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

Написать:

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

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

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

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

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

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

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

Смежные вопросы