这真的是我在swift中无法理解的: 它可以在以下代码中使用:
var dic: Dictionary<String, AnyObject> = ["please": "show me the way"]
var way: String? = dic["please"] as? String
无法编译并抛出:&#39; String&#39;不是&#39;(String,AnyObject)&#39;
的子类型但是,如果我改为编写以下代码:
var way: String? = dic["please"] as? NSString
一切都是绿色的。它与String
一样,不被视为AnyObject
的子类,但NSString
是。
所以请告诉我方式:)
答案 0 :(得分:3)
事实上:
// error: Non-class type 'String' cannot conform to class protocol 'AnyObject'
extension String : AnyObject {
}
所以你应该改用Any
。
答案 1 :(得分:0)
这是因为subscript
中的Dictionary
会返回一个可选的:
subscript (key: KeyType) -> ValueType?
这意味着你必须先打开可选项才能进行向下转换:
var dic: [String : AnyObject] = ["please": "show me the way"]
var way = dic["please"]! as? String
但是我建议你把它包裹在if-let周围,以确保你不会打开nil值。您可以在这篇文章中详细了解它:http://tech.ustwo.com/2014/08/01/ios-swift-dictionaries/