我正在使用Contentful.com
作为我的iOS
应用程序的内容后端。我不能让他们在我的项目中为我工作。
内容丰富的文档显示,它们的geo-point
返回带有Swift
的API
。
我在我的项目中使用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 struct
和NSValue
locationCoord.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。最简单的方法是使用.objCType
的NSValue
属性。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中似乎有
CDAEntry
的the 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;