2016-07-01 1 views
0

в мое приложение Я использую alamofire object mapper для использования структуры MVC. теперь я получаю один массив, и я вписываюсь в класс модели.как добавить массив. или как я могу преобразовать модель в nsmuttable массив

здесь модель класса

class OrderDetailSecond: Mappable { 

    var id : Int? 
    var isRxMedicine : Int? 
    var medicineTypeId : String? 
    var name : String? 
    var orderId : String? 
    var price : String? 
    var quentity : Int? 
    var strength : String? 

    required init?(_ map: Map){ 

    } 

    func mapping(map: Map) { 

     id <- map["id"] 
     isRxMedicine <- map["is_rx_medicine"] 
     medicineTypeId <- map["medicine_type_id"] 
     name <- map["name"] 
     orderId <- map["order_id"] 
     price <- map["price"] 
     quentity <- map["qty"] 
     strength <- map["strengh"] 
    } 
} 

Примечание: OrderDetailSecond является массивом

и теперь в OrderData, который [OrderDetailSecond] я получил этот массив

, что массив имеет много объектов, как это

(
          { 
       id = 50158; 
       "is_rx_medicine" = 1; 
       "medicine_type_id" = 2; 
       name = "1-11~qwe"; 
       "order_id" = 50128; 
       price = "<null>"; 
       qty = 12; 
       strengh = "12 mcg"; 
      }, 
          { 
       id = 50159; 
       "is_rx_medicine" = 1; 
       "medicine_type_id" = 3; 
       name = "1-12~qwe"; 
       "order_id" = 50128; 
       price = "<null>"; 
       qty = 12; 
       strengh = "12 ng/dL"; 
      } 
     ); 

Теперь я хочу только тот объект, которому «is_rx_medicine» = 1;

и хотите добавить этот объект в любую строчку. Так как я могу это сделать?

это то, что я пробовал.

for mytest in orderdata 
       { 
        if mytest.isRxMedicine == 1 
        { 

         self.myarray?.addObject(mytest) 
        } 
       } 

Примечание: в этом MyTest имеет тип OrderDetailSecond как пусть MyTest: OrderDetailSecond

и когда я напечатать MyArray его шоу orderpilz.OrderDetailSecond которое мое имя класса.

и когда я пытался напечатать как этот

print(myarray?.objectAtIndex(0).valueForKey("quentity")) 

его дать мне эту ошибку

*** NSForwarding: warning: object 0x1461b800 of class 'orderpilz.OrderDetailSecond' does not implement methodSignatureForSelector: -- trouble ahead 
Unrecognized selector -[orderpilz.OrderDetailSecond valueForKey:] 

возможную альтернативу.

1-> Я могу сделать массив с таким объектом, а затем добавить значение к этому объекту вручную, а затем добавить этот объект в массив. Так дайте мне знать, как я могу это сделать

+0

Я думаю, что вы должны сделать 'print (myarray? .objectAtIndex (0) .quentity);' ? – iphonic

+0

его показывая мне, что значение типа «Любой объект» не имеет элемента «quentity» @ iphonic –

+1

Это означает, что этот 'myarray? .objectAtIndex (0)' не имеет объекта типа класса 'OrderDetailSecond', он будет работать, только если ваш массив имеет этот тип объекта. – iphonic

ответ

1

Вы можете просто фильтровать orderdata массив вместо зацикливания и проверки состояния

let filteredArray = orderdata.filter({ 
    $0.isRxMedicine == 1 
}) 

Это возвращает массив объектов, имеющих isRxMedicine = 1

Примечания : Тип объектов в filteredArray будет таким же, как и объекты в orderdata

+0

Спасибо, я решил проблему другим способом. но даже попробовал это, он тоже хорошо работает. но можете ли вы объяснить, что означает синтаксис $ 0. @ UditS –

+0

Swift предоставляет сокращенные параметры доступа в закрытии.'$ 0' относится к первому параметру,' $ 1' и т. Д. Метод 'filter' выполняет итерацию по всем элементам в массиве по одному элементу за раз. Этот элемент является единственным параметром 'filter', поэтому $ 0 ссылается на текущий элемент, который повторяется. – UditS

Смежные вопросы