NSValue到Swift中的CLLocationCoordinate2D

时间:2014-11-18 10:46:00

标签: swift ios8 nsvalue cllocationcoordinate2d

我正在使用Contentful.com作为我的iOS应用的内容后端。在我的geo-point项目中,我无法让他们Swift回来为我工作。

Contentful文档说明API返回" NSData CLLocationCoordinate2D struct。"

我在项目中使用NSValue接近此问题,但我无法让它正常工作。这是我的代码:

var locationCoord:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 0,longitude: 0)

var locationData:NSData = entry.fields["location"] as NSData

var locationValue:NSValue = NSValue(bytes: locationData.bytes, objCType: "CLLocationCoordinate2D")

locationCoord = locationValue.MKCoordinateValue

但是,locationCoord.latitudelocationCoord.longitude return错误的值(其中一个始终为0.0)。

有人可以告诉我这里我做错了什么,以及如何正常工作?感谢。

1 个答案:

答案 0 :(得分:5)

我认为来自getBytes:length:的{​​{1}}就足够了:

NSData

BTW,为什么你的代码不起作用?

即:var locationData = entry.fields["location"] as NSData var locationCoord = CLLocationCoordinate2D(latitude: 0, longitude: 0) locationData.getBytes(&locationCoord, length: sizeof(CLLocationCoordinate2D)) 参数不期望类型名称“String”,但期望"Type Encodings",在这种情况下是objCType:。在Objective-C中,你有方便{?=dd},但在Swift中没有。最简单的方法是使用@encode(TypeName)的{​​{1}}属性。

.objCType

此外,Contentful SDK中似乎NSValuethe exact API,我认为你应该使用它:

var locationData = entry.fields["location"] as NSData
var locationCoord = CLLocationCoordinate2D(latitude: 0, longitude: 0)
var objCType = NSValue(MKCoordinate: locationCoord).objCType // <- THIS IS IT
var locationValue = NSValue(bytes: locationData.bytes, objCType: objCType)
locationCoord = locationValue.MKCoordinateValue