'(NSObject,AnyObject)'不能转换为'String'

时间:2014-08-30 05:01:08

标签: string dictionary swift nsstring optional

如何将(NSObject, AnyObject)类型的对象转换为String类型?

在下面方法的第一行末尾,as String导致编译器错误:

'(NSObject, AnyObject)' is not convertible to 'String'

street转换为NSString而不是String编译,但我将street转换为String,因为我想将其与{{1}进行比较}},其类型为placemark.name,而非String!

我知道NSStringname是可选项,但我认为它们现在不是street,因为从nil返回的所有地点似乎都是非 - 名字和街道。

MKLocalSearch

3 个答案:

答案 0 :(得分:6)

String不是对象,因此您需要将其强制转换为NSString。我建议使用以下语法来强制转换它并同时解开它。不要担心将它与String!类型的变量进行比较,因为它们是兼容的。这将有效:

func formatPlacemark(placemark: CLPlacemark) -> (String, String) {
    if let street = placemark.addressDictionary["Street"] as? NSString {
        if placemark.name == street {
            // Do something
        }
    }
}

这具有额外的好处,如果“街道”不是您字典中的有效密钥,或者如果对象类型不是NSString,则不会崩溃。它只是不会进入区块。

如果您真的希望街道成为String,您可以这样做:

if let street:String = placemark.addressDictionary["Street"] as? NSString

但在这种情况下它不会给你买任何东西。

答案 1 :(得分:2)

通过查找swift字典的下标返回类型必须是可选的,因为给定键可能没有值。

因此你必须这样做:

as String?

答案 2 :(得分:1)

我认为这可能与addressDictionary成为NSDictionary

有关

如果您将addressDictionary转换为Swift词典,它应该可以正常工作。

let street = (placemark.addressDictionary as Dictionary<String, String>)["String"]