Ios 如何在Swift中使用plist中的值,而不将它们作为任何对象出现?

Ios 如何在Swift中使用plist中的值,而不将它们作为任何对象出现?,ios,swift,nsarray,plist,clcircleregion,Ios,Swift,Nsarray,Plist,Clcircleregion,我试图从plist中获取对象,并在Swift中使用它们来创建CLCircularRegion,但当我尝试使用这些值时,我看到了这个错误 无法使用类型为(中心:$T3,半径:@lvalue AnyObject?!,标识符:@lvalue AnyObject?!)的参数列表调用“init” 下面是我用来从plist中提取数据的方法,它工作得很好,因为我可以通过println调用查看内容 func setupLocations() { // Region plist let regionArray =

我试图从plist中获取对象,并在Swift中使用它们来创建CLCircularRegion,但当我尝试使用这些值时,我看到了这个错误

无法使用类型为(中心:$T3,半径:@lvalue AnyObject?!,标识符:@lvalue AnyObject?!)的参数列表调用“init”

下面是我用来从plist中提取数据的方法,它工作得很好,因为我可以通过println调用查看内容

func setupLocations() {
// Region plist
let regionArray = NSArray(contentsOfFile: NSBundle.mainBundle().pathForResource("Landmarks", ofType: "plist")!)

println(regionArray)

for location in regionArray! {
    var longitudeNumber = location["Longitude"]
    var latitudeNumber = location["Latitude"]
    var rangeNumber = location["Range"]
    var regionString = location["Identifier"]

    let newRegion = CLCircularRegion(center: CLLocationCoordinate2DMake(latitudeNumber, longitudeNumber), radius: rangeNumber, identifier: regionString)
    }
}

在plist中,对象存储为一个数组,其中包含一个字典。该字典包含三个数字值和一个字符串值。

从字典中提取的所有值都是可选值,并且属于
AnyObject
类型

要做的第一件事是对实际类型进行显式转换:

var longitudeNumber = location["Longitude"] as? Double
var latitudeNumber = location["Latitude"] as? Double
var rangeNumber = location["Range"] as? Int
var regionString = location["Identifier"] as? String
(我根据变量名推断类型,但当然会更改为您期望的实际类型)

接下来,您应该使用可选绑定,但由于4个嵌套的
if
,或者更简单地说:

if longitudeNumber != nil && latitudeNumber != nil && rangeNumber != nil and regionString != nil {
    let newRegion = CLCircularRegion(center: CLLocationCoordinate2DMake(latitudeNumber!, longitudeNumber!), radius: rangeNumber!, identifier: regionString!)
}

注意使用强制展开
,在这种情况下是安全的,因为受外部
if
语句保护。

谢谢。我也不明白字典里的所有内容都是可选的,所以这有助于我理解为什么它们是以vs.String开头的AnyObject。对于其他阅读本文的人来说,答案是正确的,除了rangeNumber也是双精度vs.Int。正如答案中提到的,类型是推断出来的,我将使用实际类型。以防万一,有人没有意识到这一点,并且在某个地区也有类似的问题。