Как объявить переменную типа NSLayoutConstraint в расширении в Swift - PullRequest
0 голосов
/ 28 августа 2018

Я создал расширение для своего UIViewController и хочу объявить некоторые переменные, которые я могу использовать через расширение. Ниже мой код

extension UIViewController {

var mssgTopConstraint1: NSLayoutConstraint?
var mssgTopConstraint2: NSLayoutConstraint?
var mssgIconTop1: NSLayoutConstraint?
var mssgIconTop2: NSLayoutConstraint?
var isCheviClicked: Bool = false

}

У меня это расширение ошибки может не содержать сохраненных свойств для всех пяти переменных.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Ошибка довольно очевидна, вы не можете добавить сохраненные свойства в расширение, вы можете использовать только вычисленные свойства.

Вы можете создать подкласс UIViewController и объявить эти свойства в своем пользовательском классе:

class MyViewController: UIViewController {

    var mssgTopConstraint1: NSLayoutConstraint?
    var mssgTopConstraint2: NSLayoutConstraint?
    var mssgIconTop1: NSLayoutConstraint?
    var mssgIconTop2: NSLayoutConstraint?
    var isCheviClicked: Bool = false    
}

Это более чистый подход, поскольку расширение UIViewController этими свойствами не имеет особого смысла, поскольку не всем контроллерам нужны эти свойства.

Вы можете создать экземпляр этого нового контроллера или установить имя класса в XIB / Storyboard равным MyViewController. Таким образом, вы можете использовать новый контроллер и вновь объявленные свойства.

0 голосов
/ 28 августа 2018

Не реализуйте getter и setter напрямую, объявляя переменную в расширении, вы должны создать держатель, иначе это создаст цикл сохранения. Вот пример.

extension UIViewController {
struct Holder {
    static var contraint: NSLayoutConstraint = NSLayoutConstraint()
}

var actualVariable: NSLayoutConstraint {
    get {
        return Holder.contraint
    }
    set {
        Holder.contraint = newValue
    }
  }
}

Счастливое кодирование

...