Использование замыкания в функции - PullRequest
0 голосов
/ 10 апреля 2019

Мне нравится знать, есть ли способ использовать closure в функции updateView(), чтобы код был not repeated для phone и pad в приведенном ниже коде. Здесь закрытие должно иметь parameters для width и height

  @IBInspectable var leftImage: UIImage? {
        didSet {
            updateView()
        }
    }

func updateView() {
    if let image = leftImage
    {
        leftViewMode = UITextField.ViewMode.always
        if (UIDevice.current.userInterfaceIdiom == .phone)
        {
            let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            imageView.tintColor = color
            leftView = imageView
        }
        if (UIDevice.current.userInterfaceIdiom == .pad)
        {
            let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            imageView.tintColor = color
            leftView = imageView
        }
    }
    else
    {
        leftViewMode = UITextField.ViewMode.never
        leftView = nil
    }
}

У меня кончились идеи, безуспешно пытаясь. Заранее спасибо.

1 Ответ

5 голосов
/ 10 апреля 2019

Код идентичен, за исключением размера изображения.Установите переменную для размера, основанного на устройстве, и не повторяйте любой другой код.

func updateView() {
    if let image = leftImage {
        leftViewMode = UITextField.ViewMode.always
        let size: CGFloat = UIDevice.current.userInterfaceIdiom == .phone ? 20 : 30
        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: size, height: size))
        imageView.contentMode = .scaleAspectFit
        imageView.image = image
        imageView.tintColor = color
        leftView = imageView
    } else {
        leftViewMode = UITextField.ViewMode.never
        leftView = nil
    }
}

Кстати - не пишите код, который принимает решения на основе идиомы устройства.Принимайте решения в зависимости от размера представления контроллера представления.

...