无法指定String类型的值来输入AnyObject?雨燕3.0

问题描述:

我突然收到此错误类型的词典:无法指定String类型的值来输入AnyObject?雨燕3.0

var parameters = [String: AnyObject]() 

,然后如果我尝试:

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

我得到的错误为:

无法指定String类型的值来输入AnyObject?

这是用于Swift 3.0。我在这里做错了什么?为什么它不起作用?

+0

如何''SomeUser的定义? –

String值类型AnyObject只接受参考类型。因此,为了在使用DictionaryAny代替AnyObject同时添加值类型和引用类型,即

var parameters = [String: Any]() 

这是一个除了夫特3.0。

+0

谢谢你 – KexAri

我开始与斯威夫特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