2016-02-26 10 views
24

私はObjective-Cの例をSwift 2に変換しようとしていますが、私は小さな問題に遭遇しています。元のObjective-Cスニペット:コンテキストタイプ 'AnyObject'は辞書リテラルでは使用できません。

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

は、私が考えたものスウィフトコードは次のようになります。

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

生じたエラーは、次のとおりです。

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

私はObjective-を変換する方法をこの場合のCはSwiftに?

オリジナルのObjective-C:あなたは、配列の内容はStringキーと未知の値を持つ辞書があることがわかりますhttps://developer.apple.com/library/mac/samplecode/avsubtitleswriterOSX/Listings/avsubtitleswriter_main_m.html

+0

を、答えは残念ながら、私は簡単な例ところを思い付くことができない...辞書リテラルが 'Any'に割り当てられているにキャストを追加しましたこれは必要です:( –

答えて

31

。したがって

より具体的な配列を宣言

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

スウィフト3でJSONコレクション型または辞書/配列のみ値型が

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

私はそれがJSON型オブジェクトの配列であると思っていましたが、ObjCを知らないので助けにはなりません –

4

を使用含まれている場合、それは、少なくとも、うまくなければなりませんSwift 2+で私は遊び場で、次を試してみました。私の場合は

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

私はSwift 2+をXCode 7.2.1で使用していると思っていました。 Swiftバージョン準拠の設定については –

+0

Xcode 7はSwift 2を使用していますので、あなたはその質問に答えましたが、あなたが見たエラーがいくつかの異なる行にある可能性はありますか? 'AnyObject'に添字をつけようとしました。 – NRitH

関連する問題