[Swift [Как перебрать все свойства объекта - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть объект с примерно 15 свойствами. Я пытаюсь перебрать все свойства, которые не равны нулю и имеют тип Int или Double. Примерно так:

/*
object.price1 = 10.0
object.price2 = 9.9
object.price3 = 8.9
object.price4 = 10.1
object.name = "banana"
object.type = "fruit"
object.quantitySold = 0
object.dateIntroduced = ""
*/

let banana = object()

for property in banana {
    object.property = property*2
}

Есть идеи, как этого добиться?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Это не легко сделать в Swift (хотя и возможно), но это неплохо: возможность перебирать свойства объекта и изменять (изменять) их без прямой ссылки на свойство с помощью Впоследствии имя может легко привести вас в замешательство для вас или другого разработчика, когда вы пытаетесь выяснить, почему свойство объекта изменилось.

Гораздо лучше вместо этого сделать эту операцию явной и правильно назвать ее. Примерно так:

extension Object {
    func doubledPrice() -> Object {
        return Object(
            price1: price1 * 2,
            price2: price2 * 2,
            price3: price3 * 2,
            price4: price4 * 2,
            name: name, //we can't double a string
            type: type,
            quantitySold: quantitySold, //I've named the func assuming you won't double the quantitySold, obviously if that's not the desired behaviour then this needs to change
            dateIntroduced: dateIntroduced //can't double a date
        )
    }
}
0 голосов
/ 01 сентября 2018

Сделать цены массивом? Это с моего телефона, так что проверьте на ошибки. Плохая сторона этого - насколько это может быть грязно и как трудно быть организованным.

 class MyProduct{
 var price1 : Int
 var price2 : Int
 var price3 : Int

  var pricesArray : [Int]

  init(price1 : Int, price2 : Int, price3 : Int, pricesArray : [Int]){
  self.price1 = price1
  self.price2 = price2
  self.price3 = price3


 for i in 0...2
  { pricesArray.append(0)}
  pircesArray[0] = price1
 pricesArray[1] = price2
  pricesArray[2] = price3


self.pricesArray = pricesArray
 }_

 //then to go over it like
    for i in 0...3{
   banana.pricesArray[i] = banana.procesArray[i] * 2
   }

Или вы можете создать функцию в классе продуктов

  func equate( sum : Int)
  {
  yourVar = yourVar * sum
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...