[英]Cannot assign value of type String to type AnyObject? Swift 3.0
我突然收到以下錯誤的字典類型:
var parameters = [String: AnyObject]()
然后,如果我嘗試:
parameters["cancelled_by"] = someUser ?? ""
我得到的錯誤為:
無法將String類型的值分配為AnyObject類型?
這是針對Swift 3.0
。 我在這里做錯了什么? 為什么不起作用?
String
是值類型 。 AnyObject
僅接受引用類型 。 因此,為了在Dictionary
添加值類型和引用類型,請使用Any
而不是AnyObject
,即
var parameters = [String: Any]()
這是Swift 3.0的新增功能。
我現在從Swift 3開始,有點晚了……但是,直到Swift 2.2某些Swift值類型自動橋接到相應的基礎引用類型,例如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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.