2014-11-02 12 views
5

Po prostu uczę się Swifta, pochodzącego z PHP. Próbuję dowiedzieć się, czy w Swift można wykonywać zagnieżdżone tablice. Oto przykład PHP, co mówię:Wielowymiarowe słowniki są możliwe w Swift?

$myArray = array(

"motorcycles" => array ("Honda", "Ducati", "Yamaha"), 
"cars" => array(
       "sedans" => array("Jetta", "Taurus", "Impala"), 
       "sport" => array("Porsche", "Ferarri", "Corvette"), 
       "trucks" => array (
           "shortbed" => array("Ford F150", "Dodge Ram 1500"), 
           "longbed" => array(
                "standardCab" => array("Ford F350", "Dodge Ram 2500"), 
                "crewCab" => array("Ford F350", "Dodge Ram 2500") 
                ) 
          ) 
      ) 

); 

Odpowiedz

6

Tak, w Swift że byłoby:

let myArray = [ 
    "motorcycles": ["Honda", "Ducati", "Yamaha"], 
    "cars": [ 
     "sedans": ["Jetta", "Taurus", "Impala"], 
     "sport" : ["Porsche", "Ferarri", "Corvette"], 
     "trucks" : [ 
      "shortbed" : ["Ford F150", "Dodge Ram 1500"], 
      "longbed" : [ 
       "standardCab":["Ford F350", "Dodge Ram 2500"], 
       "crewCab":["Ford F350", "Dodge Ram 2500"] 
      ] 
     ] 
    ] 
] 

wartości odczytu z takiej struktury mogą być nieco trudne chociaż, ponieważ Swift ma trudność rozpoznawania typów. Aby uzyskać standardCab pojazdów, możesz zrobić:

if let trucks = myArray["cars"]?["trucks"] as? [String:AnyObject] { 
    if let standardCab = trucks["longbed"]?["standardCab"] as? [String] { 
     println(standardCab) 
    } 
} 
+0

Dzięki, ale pojawia się błąd, gdy używam swój przykład: „wykonanie zabaw nie powiodło się”. Wygląda jednak na to, że powinno działać, na podstawie przykładów, które udało mi się znaleźć w Internecie. –

+0

Udało mi się to z Xcode 6.1. Którą wersję Xcode używasz? Spróbuj dodać typ do 'myArray', aby pomóc kompilatorowi:' let myArray: [String: AnyObject] = [' – vacawama

+0

Ah, to było to. Podobno moja wersja 6.1 miała błąd. Wziąłem najnowszą wersję i działa. Dzięki! –