1. Swift / Говнокод #19936

    −59

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    if enabled {
                billingNameTextField.textColor = UIColor.blackColor()
                billingLasNameTextField.textColor = UIColor.blackColor()
                billingCompanyNameTextField.textColor = UIColor.blackColor()
                billingPhoneNumberTextField.textColor = UIColor.blackColor()
                billingAddressTextField.textColor = UIColor.blackColor()
                billingAddressTwoTextField.textColor = UIColor.blackColor()
                billingCityTextField.textColor = UIColor.blackColor()
                billingStateTextField.textColor = UIColor.blackColor()
                billingStateTextField.textColor = UIColor.blackColor()
                billingPostalCodeTextField.textColor = UIColor.blackColor()
                billingCountryTextField.textColor = UIColor.blackColor()
            } else {
                billingNameTextField.textColor = UIColor.lightGrayColor()
                billingLasNameTextField.textColor = UIColor.lightGrayColor()
                billingCompanyNameTextField.textColor = UIColor.lightGrayColor()
                billingPhoneNumberTextField.textColor = UIColor.lightGrayColor()
                billingAddressTextField.textColor = UIColor.lightGrayColor()
                billingAddressTwoTextField.textColor = UIColor.lightGrayColor()
                billingCityTextField.textColor = UIColor.lightGrayColor()
                billingStateTextField.textColor = UIColor.lightGrayColor()
                billingStateTextField.textColor = UIColor.lightGrayColor()
                billingPostalCodeTextField.textColor = UIColor.lightGrayColor()
                billingCountryTextField.textColor = UIColor.lightGrayColor()
            }

    Зачем использовать промежуточные переменные, когда можно написать такой большой if

    Запостил: gorsash, 05 Мая 2016

    Комментарии (22) RSS

    • if-ы ненужны, можно даже сортировку без if написать
      Ответить
    • http://govnokod.ru/19862
      Ответить
    • А как насчет чего-нибудь типа:

      @IBOutlet // ну или без, если не юзается storyboard
      private var billingTextFields: [UITextField]!
      
      billingTextFields.each({
          $0.textColor = enabled ? .blackColor() : .lightGrayColor()
      })
      Ответить
    • bypass верно сказал про IBOutletCollection .

      А можно сделать програмно: найти все все дочерние вью определенного типа или с определенным протоколом

      Вообще архитектура тут пахнет говном.
      И копипастом
      billingStateTextField.textColor = UIColor.blackColor()
      billingStateTextField.textColor = UIColor.blackColor()
      Ответить
    • показать все, что скрытоПочему бы не запилить какие-нибудь UIColor.TextColorEnabled и UIColor.TextColorDisabled вместо зашивания цветов в код намертво.
      Ответить
      • категорией?
        Ответить
        • enum Colors {
              static let BillingTextFieldEnabled = UIColor.blackColor()
              static let BillingTextFieldDisabled = UIColor.lightGrayColor()
          }
          Ответить
          • показать все, что скрытоКто ж так делает энумы в свифте. Надо так

            enum Colors: UIColor {
            case BillingTextFieldEnabled = UIColor.blackColor()
            case BillingTextFieldDisabled = UIColor.lightGrayColor()
            }
            Ответить
            • Чтобы "унаследовать" enum от UIColor, тебе столько манипуляций сделать придется, что проще этого не делать. Я написал enum вместо class или struct, чтобы нельзя было написать потом let c = Colors() и получить объект, в котором ничего нет.

              Но если уж так хочется, то можно что-то типа такого
              protocol ColorRepresentable {
                  var color: UIColor { get }
              }
              
              enum Colors: ColorRepresentable {
                  
                  case BillingTextFieldEnabled
                  case BillingTextFieldDisabled
                  
                  var color: UIColor {
                      switch self {
                      case .BillingTextFieldEnabled:
                          return .blackColor()
                      case .BillingTextFieldDisabled:
                          return .lightGrayColor()
                      }
                  }
              }
              
              textField.textColor = Colors.BillingTextFieldEnabled.color
              Ответить
              • Я тут даже не прав немного. "Унаследовать" enum от UIColor нельзя от слова совсем, ибо необходимо, чтобы UIColor реализовывал протокол RawRepresentable, а в extension UIColor написать required нельзя, только напрямую в классе.
                Ответить
          • я не пишу на свифте, а в objc нельзя было сделать енум из NSObjectов:)
            Обычно делали расширение типа категории (навешивали методы)
            Ответить
            • В яблосишечке можно было бы сделать так:
              @interface Colors
              + (nonnull UIColor *)billingTextFieldEnabled
              ....
              @end
              
              @implementation Colors
              ....
              @end
              
              self.textFiled.textColor = [Colors billingTextFieldEnabled]; // Colors.billingTextFieldEnabled;

              Ну или дефайнами зафигачить)

              А вообще в емумы в свифте помимо их стандартной функции можно добавлять еще сторонний функционал, типа как я сделал выше

              typedef NS_ENUM(NSUInteger, Foo)
              {
                  FooBar,
                  FooBaz
              };

              эквивалент
              enum Foo {
                  case Bar
                  case Baz
              }
              Ответить
              • лучше сделать через категориию и потом (прости за синтаксис, пишу по памяти)
                #import "UIColor+BusinessColors"
                UIColor *badColor = [UIColor veryBadColor];


                правда шлангу может понадобиться ключик чтобы понимать категории если код разнесен на пару модулей
                Ответить
      • показать все, что скрытоwh0cd830193 <a href=http://buycialis2017.com/>buy cialis</a>
        Ответить

    Добавить комментарий