Swift Как СУХОЙ код в замыканиях переменных? - PullRequest
2 голосов
/ 08 апреля 2019

Я использую Auto Layout (программно) для настройки моего ViewController, я получил все, что хотел, но теперь я хочу сделать свой код более эффективным, и я заметил, что у меня довольно много повторяющихся кодов, я пытаясь понять, как взять повторяющийся код в закрытии переменной и поместить его в другое место, чтобы код был чище.

Как мне очистить мой код? Все еще плохо знаком с переменными замыканиями.

Код, который я скопировал и вставил, является глобальной переменной.

let descriptionTextViewOne: UITextView = {
    let textView = UITextView()

    let text = "Tap anywhere to start\nyour day right!"
    let shadow = NSShadow()
    shadow.shadowColor = UIColor.white
    shadow.shadowOffset = CGSize(width: 1, height: 1)
    let attributes: [NSAttributedString.Key: Any] = [
        .font: UIFont.init(name: "Marker felt", size: 25)!,
        .foregroundColor: UIColor.init(red: 91.0/255.0, green: 91.0/255.0, blue: 91.0/255.0, alpha: 1.0),
        .shadow: shadow
    ]
    let attributedText = NSAttributedString(string: text, attributes: attributes)
    textView.attributedText = attributedText
    textView.textAlignment = .center
    textView.isEditable = false
    textView.isScrollEnabled = false
    textView.isSelectable = false
    textView.translatesAutoresizingMaskIntoConstraints = false
    textView.backgroundColor = .clear
    return textView
}()

let descriptionTextViewTwo: UITextView = {
    let textView = UITextView()

    let text = "A happy video a day\nmakes the heartache\ngo away."
    let shadow = NSShadow()
    shadow.shadowColor = UIColor.white
    shadow.shadowOffset = CGSize(width: 1, height: 1)
    let attributes: [NSAttributedString.Key: Any] = [
        .font: UIFont.init(name: "Marker felt", size: 25)!,
        .foregroundColor: UIColor.init(red: 91.0/255.0, green: 91.0/255.0, blue: 91.0/255.0, alpha: 1.0),
        .shadow: shadow
    ]
    let attributedText = NSAttributedString(string: text, attributes: attributes)
    textView.attributedText = attributedText
    textView.textAlignment = .center
    textView.isEditable = false
    textView.isScrollEnabled = false
    textView.isSelectable = false
    textView.translatesAutoresizingMaskIntoConstraints = false
    textView.backgroundColor = .clear
    return textView
}()

1 Ответ

2 голосов
/ 08 апреля 2019

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

func descriptionTextView(with text: String) -> UITextView {
    let textView = UITextView()
    let shadow = NSShadow()
    shadow.shadowColor = UIColor.white
    shadow.shadowOffset = CGSize(width: 1, height: 1)
    let attributes: [NSAttributedString.Key: Any] = [
        .font: UIFont.init(name: "Marker felt", size: 25)!,
        .foregroundColor: UIColor.init(red: 91.0/255.0, green: 91.0/255.0, blue: 91.0/255.0, alpha: 1.0),
        .shadow: shadow
    ]
    let attributedText = NSAttributedString(string: text, attributes: attributes)
    textView.attributedText = attributedText
    textView.textAlignment = .center
    textView.isEditable = false
    textView.isScrollEnabled = false
    textView.isSelectable = false
    textView.translatesAutoresizingMaskIntoConstraints = false
    textView.backgroundColor = .clear
    return textView
}

lazy var descriptionTextViewOne: UITextView = descriptionTextView(with: "Tap anywhere to start\nyour day right!")

lazy var descriptionTextViewTwo: UITextView = descriptionTextView(with: "A happy video a day\nmakes the heartache\ngo away.")
...