2016-03-25 2 views
0

С момента обновления последнего Xcode я начал получать следующую ошибку: «Неоднозначное использование индекса», связанное с этим фрагментом кода;Неоднозначное использование подстроки Swift iOS

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell = tableView.dequeueReusableCellWithIdentifier("postsCell") as! CustomTableViewCell! 
     if cell == nil { 
      cell = CustomTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "postsCell") 
     } 
     let dict:NSDictionary = arrPosts[indexPath.row] 

     if let postResourceName = dict["resource_name"]![0] as! String? where !postResourceName.isEmpty { 
      cell?.customPostTitle?.text = String(htmlEncodedString: postResourceName) 
     } else if let postTitle = dict["title"]!["rendered"] as? String { 
      cell?.customPostTitle?.text = String(htmlEncodedString: postTitle) 
     } 

В частности, на этой линии;

if let postResourceName = dict["resource_name"]![0] as! String? where !postResourceName.isEmpty { 

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

Любые указатели?

С уважением, Майкл

+0

Неоднозначное использование индекса означает, что компилятор не может вывести соответствующего типа, поскольку значение из словаря всегда 'AnyObject '. Как объявляется «arrPosts»? И если вы новичок в Swift (повторно), внимательно прочитайте абзац «Необязательное связывание» в руководстве по языку. – vadian

+0

Начальная переменная для arrPosts определяется следующим образом; var arrPosts = [[String: AnyObject]]() –

ответ

0

Swift компилятор выдаст эту ошибку, потому что есть не знает, какие объекты у вас есть, как values в вас словарю, поэтому, когда вы делаете dict["resource_name"]![0] вы хотите получить доступ к первому элементу массива, содержащийся в словаре как value. Но вы никогда не говорите, что ваши значения являются массивами, поэтому тип values равен AnyObject. Можно указать, что у вас есть Array в вашем словаре, заменив

let dict:NSDictionary = arrPosts[indexPath.row] 

с

let dict = arrPosts[indexPath.row] as [String:[String]] 
+0

Спасибо, просто попробовал это, и теперь я получаю следующую ошибку в той же строке; Ссылка на общий тип «Массив» требует аргументов в <...> Начальная переменная для arrPosts определяется следующим образом, если это имеет какое-то значение ?; var arrPosts = [[String: AnyObject]]() –

+0

Я обновил свой ответ – Jelly

+0

Необходимо, чтобы «как» менялось на «как!», Это решило это. Как обычно, это приводит к пометке других ошибок. Время работать через это сейчас. –

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