无法指定String类型的值来输入AnyObject?雨燕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。
+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的定义? –