我正在使用Contentful.com作为我的iOS应用程序的内容后端。我不能让他们在我的项目中为我工作。
内容丰富的文档显示,它们的geo-point返回带有SwiftAPI
我在我的项目中使用NSData来处理这个问题,但是我无法使它正常工作。这是我的代码:

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

但是,CLLocationCoordinate2D structNSValuelocationCoord.latitude值错误(其中一个值总是locationCoord.longitude)。
有人能告诉我我在这里做错了什么,以及如何让这一切正常运作吗?谢谢。

最佳答案

我认为,getBytes:length:中的NSData就足够了:

var locationData = entry.fields["location"] as NSData
var locationCoord = CLLocationCoordinate2D(latitude: 0, longitude: 0)
locationData.getBytes(&locationCoord, length: sizeof(CLLocationCoordinate2D))

顺便问一下,为什么你的代码不起作用?
也就是说:objCType:参数不需要类型名“string”,但需要"Type Encodings",在本例中是{?=dd}。在objective-c中,您可以使用handy@encode(TypeName),但不能使用swift。最简单的方法是使用.objCTypeNSValue属性。
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

而且,在contentful sdk中似乎有CDAEntrythe exact API,我认为您应该使用这个:
/**
 Retrieve the value of a specific Field as a `CLLocationCoordinate2D` for easy interaction with
 CoreLocation or MapKit.

 @param identifier  The `sys.id` of the Field which should be queried.
 @return The actual location value of the Field.
 @exception NSIllegalArgumentException If the specified Field is not of type Location.
 */
-(CLLocationCoordinate2D)CLLocationCoordinate2DFromFieldWithIdentifier:(NSString*)identifier;

07-26 09:37