我突然收到此錯誤類型的詞典:無法指定String類型的值來輸入AnyObject?雨燕3.0
var parameters = [String: AnyObject]()
,然後如果我嘗試:
parameters["cancelled_by"] = someUser ?? ""
我得到的錯誤爲:
無法指定String類型的值來輸入AnyObject?
這是用於Swift 3.0
。我在這裏做錯了什麼?爲什麼它不起作用?
我突然收到此錯誤類型的詞典:無法指定String類型的值來輸入AnyObject?雨燕3.0
var parameters = [String: AnyObject]()
,然後如果我嘗試:
parameters["cancelled_by"] = someUser ?? ""
我得到的錯誤爲:
無法指定String類型的值來輸入AnyObject?
這是用於Swift 3.0
。我在這裏做錯了什麼?爲什麼它不起作用?
String
是值類型。 AnyObject
只接受參考類型。因此,爲了在使用Dictionary
Any
代替AnyObject
同時添加值類型和引用類型,即
var parameters = [String: Any]()
這是一個除了夫特3.0。
謝謝你 – KexAri
我開始與斯威夫特3,現在,有點晚了......然而,直到雨燕2.2的一些斯威夫特值類型被自動橋接到相應的基礎引用類型,如String
到NSString
,Dictionary<>
到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
如何''SomeUser的定義? –