午前中 私は優れたiOS Apps With REST APIs本の例に従って、AlamofireとSwiftyJSONを使用しています。私が本に触れていないことの一つは、入ってくるjsonオブジェクトを特定の順序に並べ替える方法です。日付。私が下に貼り付けたコードはjsonオブジェクトを引き込むのに問題ありませんが、私が知る限り、created_byによって自動的に順序付けられています。私は野菜で野菜のクラスから始めましょうAlamofireとSwiftyJSONの使用時にJSONをソート
.sort { $0.name < $1.name }
:私は別の順序でソートしたいのですが、私のようなもので並べ替えることができるように、私のクラスは野菜と呼ばれ、name属性を持っていたと言うことができます。私JSONSerializerファイル内の迅速
class Vegetable: ResponseJSONObjectSerializable {
var id: Int?
var name : String?
var date: NSDate?
}
私は次のことを持って、私は、各呼び出しでいくつかのより多くの柔軟性を好むように私はここで直接順序を変更したいと思いますかわかりません。
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)
}
その後、私のAPIManagerに私は
func getAllVegetables(completionHandler: (Result<[Vegetable], NSError>) -> Void) {
Alamofire.request(VegetableRouter.GetVegetables())
.responseArray { (response:Response<[Vegetable], NSError>) in
completionHandler(response.result)
}
}
最後に、以下の機能を持って、私のテーブルビューを移入私が持っている:私はこれを取得することができます任意の助けに感謝
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()
}
}
、おかげで!
VegetableクラスにNSDateプロパティがありますか? –
ええ、わかりやすくするために私の質問に簡単なクラスを追加しました。 –