example array alamofireobjectmapper ios swift swift2 alamofire objectmapper

ios - array - objectmapper swift example



¿AlamofireObjectMapper/ObjectMapper es compatible con la asignación de tipo de estructura? (1)

Estoy usando AlamofireObjectMapper para analizar la respuesta json a mi objeto. AlamofireObjectMapper es una extensión de ObjectMapper .

De acuerdo con sus documentos, mi clase modelo debe ajustarse al protocolo Mappable . Por ejemplo:

class Forecast: Mappable { var day: String? var temperature: Int? var conditions: String? required init?(_ map: Map){ } func mapping(map: Map) { day <- map["day"] temperature <- map["temperature"] conditions <- map["conditions"] } }

Para cumplir con el protocolo Mappable, mi clase de modelo tiene que implementar el inicializador requerido y la función de mapeo para cada campo. Que tiene sentido.

PERO, ¿cómo soporta el tipo de struct ? Por ejemplo, tengo una estructura de Coordinate , intento cumplir el protocolo de Mappable :

struct Coordinate: Mappable { var xPos: Int var yPos: Int // ERROR: ''required'' initializer in non-class type required init?(_ map: Map) {} func mapping(map: Map) { xPos <- map["xPos"] yPos <- map["yPos"] } }

No puedo hacer que mi Coordinate ajuste al Mappable, debido al error que muestro arriba.

(Creo que con bastante frecuencia se usa struct para datos de coordenadas en lugar de usar class )

Mis preguntas :

Q1. ¿Admite AlamofireObjectMapper o la biblioteca ObjectMapper el tipo de struct ? ¿Cómo usarlos para analizar la respuesta json a un objeto tipo struct ?

Q2. Si esas bibliotecas no son compatibles con el análisis de la respuesta json al objeto tipo struct. ¿Cuál es la forma de hacerlo en iOS con Swift2?


El protocolo Mappable se define así

public protocol Mappable { init?(_ map: Map) mutating func mapping(map: Map) }

Tienes que implementarlo en consecuencia:

struct Coordinate: Mappable { var xPos: Int? var yPos: Int? init?(_ map: Map) { } mutating func mapping(map: Map) { xPos <- map["xPos"] yPos <- map["yPos"] } }

o

struct Coordinate: Mappable { var xPos: Int var yPos: Int init?(_ map: Map) { } mutating func mapping(map: Map) { xPos <- map["xPos"] ?? 0 yPos <- map["yPos"] ?? 0 } }

El constructor no se puede marcar como requerido porque struct no se puede heredar. la función de mapeo tiene que marcarse como mutante porque muta los datos almacenados en la estructura ...