2016-02-26 18 views
24

Bir Objective-C örneğini Swift 2'ye dönüştürmeyi denemeye başladım, ancak küçük bir sorunla karşılaşıyorum. Orijinal Objective-C pasajı:Bağlamsal tür 'AnyObject' sözlük değişkeni ile kullanılamaz?

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

ve ne düşündüğümü Swift kodu olmalıdır:

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

çıkan hatadır:

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

Ben Objective- dönüştürmek istiyorum nasıl Bu durumda C, Swift'e mi?

Orjinal Objective-C: Sen dizinin içeriği String tuşları ve bilinmeyen değerleri ile sözlükleri olduğunu görebilirsiniz https://developer.apple.com/library/mac/samplecode/avsubtitleswriterOSX/Listings/avsubtitleswriter_main_m.html

+0

Benim durumumda, yanıt, 'Herhangi bir' atanmış olan Sözlük değişkeni için bir döküm eklemekti ... Ne yazık ki, basit bir örnekle gelemiyorum. Bu gerekli :( –

cevap

31

. Bu nedenle

daha spesifik diziyi bildirmek

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

Swift 3'te JSON toplama türleri için veya Sözlük/dizi sadece değer türleri

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

Teşekkürler, ben bir JSON tipi nesneler dizisi olduğunu düşünmüştüm. ObjC'yi bilmemek yardımcı olmadı –

4

kullanmak içeriyorsa En az, sadece iyi olmalı Swift 2+. Sadece bir oyun alanında aşağıdakileri denedim:

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

XCode 7.2.1 ile Swift 2+ kullanıyordum. Hızlı sürüm uyumluluk ayarları için? –

+0

Xcode 7, Swift 2'yi kullanır, bu yüzden bu soruyu yanıtladınız. Gördüğünüz hatanın bazı * farklı * satırında olması mümkün mü? bir "AnyObject" üzerinde bir altyazı kullanmaya çalıştı. – NRitH