Morgen alle, Ich habe entlang der Beispiele in der ausgezeichneten iOS Apps With REST APIs Buch und als Ergebnis mit Alamofire und SwiftyJSON gefolgt. Eine Sache, die ich nicht in dem Buch erwähnt, ist, wie Sie die eingehenden JSON-Objekte in eine bestimmte Reihenfolge sortieren würden, z. Datum. Der Code, den ich unten eingefügt habe, funktioniert gut, um die JSON-Objekte einzubinden, aber soweit ich das beurteilen kann, werden sie automatisch von created_by geordnet. Ich mag von einer anderen Reihenfolge sortieren, kann meine Klasse sagt, wurde so ein Namensattribut Gemüse- und hatte genannt, dass ich wie von etwas sortieren könnte:Sortierung JSON bei der Verwendung von Alamofire und SwiftyJSON
.sort { $0.name < $1.name }
ich mit dem Gemüse Klasse in Gemüse beginnen werde. swift
class Vegetable: ResponseJSONObjectSerializable {
var id: Int?
var name : String?
var date: NSDate?
}
Inside my JSONSerializer Datei ich folgendes haben, ich bin nicht sicher, ob ich den Auftrag direkt hier ändern würde mir wünschen, als ich bei jedem Aufruf etwas mehr Flexibilität bevorzugen würden.
public func responseArray<T: ResponseJSONObjectSerializable>(completionHandler: Response<[T], NSError> -> Void) -> Self {
let serializer = ResponseSerializer<[T], NSError> { request, response, data, error in
guard error == nil else {
return .Failure(error!)
}
guard let responseData = data else {
let failureReason = "Array could not be serialized because input data was nil."
let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason)
return .Failure(error)
}
let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let result = JSONResponseSerializer.serializeResponse(request, response, responseData, error)
switch result {
case .Success(let value):
let json = SwiftyJSON.JSON(value)
var objects: [T] = []
for (_, item) in json {
if let object = T(json: item) {
objects.append(object)
}
}
return .Success(objects)
case .Failure(let error):
return .Failure(error)
}
}
return response(responseSerializer: serializer, completionHandler: completionHandler)
}
Dann in meinem APIManager habe ich die folgende Funktion
func getAllVegetables(completionHandler: (Result<[Vegetable], NSError>) -> Void) {
Alamofire.request(VegetableRouter.GetVegetables())
.responseArray { (response:Response<[Vegetable], NSError>) in
completionHandler(response.result)
}
}
Schließlich füllen meine Tableview Ich habe:
func loadVegetables() {
self.isLoading = true
VegetablesAPIManager.sharedInstance.getAllVegetables() {
result in
self.isLoading = false
if self.refreshControl.refreshing {
self.refreshControl.endRefreshing()
}
guard result.error == nil else {
print(result.error)
// TODO: Display Error
return
}
if let fetchedVegetables = result.value {
self.vegetables = fetchedVegetables
for vegetable in fetchedVegetables {
// Nothing here at the moment
}
}
self.tableView.reloadData()
}
}
ich jede Hilfe dankbar kann ich mit diesem bekommen, Dank !
Haben Sie eine NSDate-Eigenschaft in Ihrer Gemüseklasse? –
Ja, ich habe meiner Frage einfach eine einfache Klasse hinzugefügt. –