Swift @IBDesignable - @IBInspectable несколько переменных

Я пытаюсь создать собственный класс для UILabel, чтобы видеть результат в раскадровке. Мне нужно изменить атрибуты текста, чтобы создать метку контура.

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

Если у меня было несколько var, я получаю следующие ошибки.

> 'var' declarations with multiple variables cannot have explicit
> getters/setters 'var' cannot appear nested inside another 'var' or
> 'let' pattern Getter/setter can only be defined for a single variable

Как я могу использовать несколько переменных? КОД:

import UIKit

@IBDesignable
class CustomUILabel: UILabel {
    @IBInspectable var outlineWidth: CGFloat = 1.0, var outlineColor = UIColor.whiteColor() {
        didSet {


                let strokeTextAttributes = [
                    NSStrokeColorAttributeName : outlineColor,
                    NSStrokeWidthAttributeName : -1 * outlineWidth,
                    ]

                self.attributedText = NSAttributedString(string: self.text ?? "", attributes: strokeTextAttributes)

        }
    }



}

person SNos    schedule 10.08.2016    source источник
comment
Просто поместите их в отдельные строки и аннотируйте каждую по мере необходимости.   -  person Losiowaty    schedule 10.08.2016


Ответы (1)


Как я сказал в комментарии - вам нужно, чтобы каждая переменная была в отдельных строках. Это означает, что вам нужно объявить didSet для них обоих. Что-то вроде этого :

import UIKit

@IBDesignable
class CustomUILabel: UILabel {
    @IBInspectable var outlineWidth: CGFloat = 1.0 {
        didSet {
            self.setAttributes(self.outlineColor, outlineWidth: self.outlineWidth)
        }
    }

    @IBInspectable var outlineColor = UIColor.whiteColor() {
        didSet {
            self.setAttributes(self.outlineColor, outlineWidth: self.outlineWidth)
        }
    }

    func setAttributes(outlineColor:UIColor, outlineWidth: CGFloat) {
        let strokeTextAttributes = [
            NSStrokeColorAttributeName : outlineColor,
            NSStrokeWidthAttributeName : -1 * outlineWidth,
            ]

        self.attributedText = NSAttributedString(string: self.text ?? "", attributes: strokeTextAttributes)
    }

}
person Losiowaty    schedule 10.08.2016
comment
Спасибо .. Я пробовал это, однако я могу видеть и изменять outlineWidth только в инспекторе атрибутов - person SNos; 10.08.2016
comment
копирование и вставка не сработали .. Написание кода прошло отлично - person SNos; 10.08.2016
comment
Почему, если я обновляю текст в коде, текстовые атрибуты не сохраняются? - person SNos; 11.08.2016
comment
Трудно сказать, не увидев кода;) но вы должны помнить, что text и attributedText являются отдельными свойствами UILabel. Это в основном означает, что каждый раз, когда вы хотите установить новый текст и сохранить атрибуты, вам нужно создавать с ними новый NSAttributedString. - person Losiowaty; 11.08.2016
comment
спасибо .. Чтобы изменить текстовые атрибуты для новой строки, я должен вызвать функцию setAttributes - person SNos; 11.08.2016