2016-09-22 44 views
0

我突然收到此錯誤類型的詞典:無法指定String類型的值來輸入AnyObject?雨燕3.0

var parameters = [String: AnyObject]() 

,然後如果我嘗試:

parameters["cancelled_by"] = someUser ?? "" 

我得到的錯誤爲:

無法指定String類型的值來輸入AnyObject?

這是用於Swift 3.0。我在這裏做錯了什麼?爲什麼它不起作用?

+0

如何''SomeUser的定義? –

回答

4

String值類型AnyObject只接受參考類型。因此,爲了在使用DictionaryAny代替AnyObject同時添加值類型和引用類型,即

var parameters = [String: Any]() 

這是一個除了夫特3.0。

+0

謝謝你 – KexAri

1

我開始與斯威夫特3,現在,有點晚了......然而,直到雨燕2.2的一些斯威夫特值類型被自動橋接到相應的基礎引用類型,如StringNSStringDictionary<>NSDictionary,並等等。看起來這個自動橋接已經在Swift 3中刪除了。

在某些情況下,將[String : AnyObject]轉換爲[String : Any]是合理的,而在其他情況下則不合適,具體取決於您在做什麼。在我目前的情況下,我需要參考類型,但它不。

所以我解決通過請求顯式橋接的問題,通過轉換成AnyObject

var dictionary: [String : AnyObject] = [:] 
dictionary["valueType"] = "Value Type" // Error 
dictionary["referenceType"] = "Reference Type" as AnyObject // OK 

參考:

let text = "Text" 
let asAny = text as Any 
let asAnyObject = text as AnyObject 
let asNSString: NSString = text as NSString 

type(of: text) // Prints String.Type 
type(of: asAny) // Prints String.Type 
type(of: asAnyObject) // Prints _NSContiguousString.Type 
type(of: asNSString) // Prints _NSContiguousString.Type 
相關問題