2016-02-26 36 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:https://developer.apple.com/library/mac/samplecode/avsubtitleswriterOSX/Listings/avsubtitleswriter_main_m.html

+0

就我而言,答案是鑄造添加到字典字面被分配到'Any' ......不幸的是,我不能拿出一個簡單的例子,其中這是必要的:( –

回答

31

你可以看到,陣列的內容與String鍵和未知值的字典。

因此聲明數組更具體

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

相關問題