我正在使用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.latitude
和locationCoord.longitude
return
错误的值(其中一个始终为0.0
)。
有人可以告诉我这里我做错了什么,以及如何正常工作?感谢。
答案 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中似乎NSValue
有the 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