Sabahın tamamı, Mükemmel iOS Apps With REST APIs kitabındaki örneklerde izledim ve sonuç olarak Alamofire ve SwiftyJSON kullanarak. Kitapta bahsettiğim bir şey, gelen json nesnelerini belirli bir sıraya göre nasıl sıralayacağınızdır. tarihi. Aşağıda yaptığım kod json nesnelerini çekmek için gayet güzel çalışıyor, ancak söyleyebildiğim kadarıyla, bunlar otomatik olarak created_by tarafından sipariş ediliyor. Ben Sebze Sebze sınıfı ile başlayacağızAlamofire ve SwiftyJSON kullanırken JSON Sıralama
.sort { $0.name < $1.name }
: Ben farklı bir sıraya göre sıralamak istiyorum, ben böyle bir şey göre sıralamak diye benim sınıf Sebze denilen ve bir isim özelliği vardı diyelim. Ben şu var benim JSONSerializer dosyası içinde
class Vegetable: ResponseJSONObjectSerializable {
var id: Int?
var name : String?
var date: NSDate?
}
hızlı, ben her çağrı ile biraz daha esneklik tercih ediyorum burada doğrudan sırasını değiştirmek isteyen emin değilim.
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)
}
Sonra benim APIManager I
func getAllVegetables(completionHandler: (Result<[Vegetable], NSError>) -> Void) {
Alamofire.request(VegetableRouter.GetVegetables())
.responseArray { (response:Response<[Vegetable], NSError>) in
completionHandler(response.result)
}
}
Son olarak aşağıdaki işlevi var benim tableView doldurmak Ben: Ben bu ile olsun herhangi bir yardım takdir
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()
}
}
, teşekkürler !
Vegetable sınıfınızda NSDate özelliğiniz var mı? –
Evet, açıklığa kavuşturmak için soruma basit bir sınıf ekledim. –