2015-11-22 5 views
0

Я использую this class, что было написано на Swift 1.2, и теперь я хочу использовать его с Swift 2.0.Как исправить «Неоднозначное использование« индекса »каждый раз?

Я получаю сообщение об ошибке: Ambiguous use of 'subscript' @let artist = result["name"] as! String

    } else if let jsonArtists = jsonResult["artists"] as? NSDictionary { 
        if let results:NSArray = jsonArtists["items"] as? NSArray { 
         dispatch_async(dispatch_get_main_queue(), { 
          self.searching = false 
          var suggestionResults: [spotifySearchResult] = [] 
          for result in results { 
           let artist = result["name"] as! String 
           var sugresult = spotifySearchResult() 
           sugresult.artist = artist 
           if !suggestionResults.contains(sugresult) { 
            suggestionResults.append(sugresult) 
           } 
          } 
          handler(suggestionResults) 
         }) 
        } 
       } 
      } 

Я пробовал различные исправления, такие как let artist = (result["name"] as! String)let artist = (result["name"] as! String) as! String или Но ничего не получалось.

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

Может кто-нибудь объяснить мне, как исследовать, чтобы исправить это? Не только исправление для моего дела. Я бы предпочел исправить это своими намеками!

BTW Что значит subscript? Подстрочный индекс между кавычкой? ИМХО сообщение об ошибке немного расплывчатым ...

EDIT:

class spotifySearchResult : NSObject { 
var artist="" 
var track="" 
var duration=0 
var spotifyURL = NSURL() 
var spotifyURI = NSURL() 

override func isEqual(theObject: AnyObject?) -> Bool { 
    if let myObject = theObject as? spotifySearchResult { 
     return (myObject.artist.uppercaseString == self.artist.uppercaseString && myObject.track.uppercaseString == self.track.uppercaseString) 
    } 
    return false 
} 
} 

ответ

0

Подписка означает использовать короткий синтаксис item["key"] для item.objectForKey["key"]

results, как представляется, массив словарей, так что я предлагаю отбрасывается до более конкретного типа

if let results = jsonArtists["items"] as? [[String:AnyObject]] { 

или даже, если все значения гарантированно являются строками

if let results = jsonArtists["items"] as? [[String:String]] { 
+0

Hi @vadian, спасибо за ваш ответ, но это не работает, и я действительно хотел бы понять, как «отлаживать» это. BTW спасибо за объяснение 'subscript' – VivienG

+0

Возможно, причина в том, что' spotifySearch' не совместим с Swift 2. Вы это проверили? – vadian

+0

Я отредактировал мой вопрос, добавив класс 'spotifySearch', что вы имеете в виду несовместимый? – VivienG

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