字典值在swift中作为String(而不是NSString)

时间:2014-08-15 16:00:39

标签: ios swift

这真的是我在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是。

所以请告诉我方式:)

2 个答案:

答案 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/