Ябло (Свежее) / Говнокод #19936 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 gorsash, (Updated )

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

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

    @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];


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

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8