2016-02-26 9 views
24

Jestem w trakcie próby przekształcenia przykładu Objective-C na Swift 2, ale pojawia się mały problem. Oryginalny Objective-C urywek:Typ kontekstowy "AnyObject" nie może być użyty z literałem słownikowym?

NSMutableArray *inputsOutputs = [NSMutableArray array]; 
... 
[inputsOutputs addObject:@{@"input" : input, @"output" : trackOutput}]; 

i co myślałem kod Swift powinno być:

var inputsOutputs = [Any?]() 
... 
inputsOutputs.append([ "input": input, "output": trackOutput ]) 

Uzyskany błąd jest:

Contextual type 'AnyObject' cannot be used with dictionary literal? 

Jak przekonwertować Objective- C w tym przypadku do Swift?

Original Objective-C: https://developer.apple.com/library/mac/samplecode/avsubtitleswriterOSX/Listings/avsubtitleswriter_main_m.html

+0

W moim przypadku odpowiedzią było dodanie rzutu do dosłownej literatury przypisanej do "Any" ... Niestety, nie mogę wymyślić prostego przykładu gdzie to jest konieczne :( –

Odpowiedz

31

Można zobaczyć, że zawartość tablicy są słowniki z String kluczy i nieznanych wartości.

Zatem stwierdzenie, że układ bardziej szczegółowe

var inputsOutputs = [[String:AnyObject]]() 

Swift 3 typów zbierania JSON lub słownika/tablica zawiera typy tylko wartość użytkową

var inputsOutputs = [[String:Any]]() 
+0

Dziękuję, myślałem, że to tablica obiektów typu JSON.Nie wiedząc ObjC, to nie pomaga –

4

powinno być dobrze, przynajmniej w Swift 2+. Właśnie wypróbowałem następujące rzeczy na placu zabaw:

var objects = [Any?]() 
let dict = [ "one" : 1, "two" : 2 ] 
objects.append(dict) // prints [{["one": 1, "two": 2]}] 
objects.append([ "one" : 1, "two" : 2 ]) // prints [{["one": 1, "two": 2]}, {["one": 1, "two": 2]}] 
+0

Myślałem, że używam Swift 2+, z XCode 7.2.1. Nie wiem, gdzie chciałbym sprawdzić dla ustawień zgodności Swift wersja? –

+0

Xcode 7 używa Swift 2, więc odpowiedziałeś na to pytanie.Czy to możliwe, że błąd który widziałeś był na * innej * linii? Jest to rodzaj błędu, który zobaczysz, jeśli próbował użyć indeksu dolnego na 'AnyObject'. – NRitH