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

ma1*_*w28 6 string dictionary nsstring optional swift

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

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

'(NSObject, AnyObject)' is not convertible to 'String'
Run Code Online (Sandbox Code Playgroud)

转换streetNSString而不是String编译,但我正在施法street,String因为我想比较它placemark.name,它有类型String!,而不是NSString.

我知道name并且street是选择,但我认为他们现在不是nil因为所有返回的地方MKLocalSearch似乎都有非零名称和街道.

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

vac*_*ama 6

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

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

这具有额外的好处,如果"Street"不是您字典中的有效键,或者如果对象类型不是NSString,则不会崩溃.它只是不会进入该区块.

如果你真的想要街道成为一个String你可以做到这一点:

if let street:String = placemark.addressDictionary["Street"] as? NSString
Run Code Online (Sandbox Code Playgroud)

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