Переменная доступа, объявленная внутри метода в родительском классе из подкласса (swift) - PullRequest
0 голосов
/ 03 октября 2018

Я вполне уверен, что есть что-то очевидное, что я упускаю и / или делаю неправильно здесь.

У меня есть базовый класс с функцией handleTapped (), которая обрабатывает нажатие кнопки.

В подклассе я хочу переопределить эту функцию, но мне нужен доступ к переменным, которые я объявляю в функции handleTapped () в родительском классе.

Пример:

class ParentClass {
  @objc func handleTapped(sender: UITapGestureRecognizer) {
    var a = [Int]()
    var b = 10

    if a[1] == b {
      // do something
    }    
  }
}

class SubClass: ParentClass {
  @objc override func handleTapped(sender: UITapGestureRecognizer) {
    super.handleTapped(sender: sender)
    if a[1] == b {
      // do something else
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Извлекаем переменные из метода в класс следующим образом:

class ParentClass {

    var a = [Int]()
    var b = 10

    func handleTapped(sender: UITapGestureRecognizer) {
        if a[1] == b {
            // do something
        }
    }
}

class SubClass: ParentClass {

    override func handleTapped(sender: UITapGestureRecognizer) {
        super.handleTapped(sender: sender)
        if a[1] == b {
            // do something else
        }
    }
}
0 голосов
/ 03 октября 2018

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

В этом случае вам нужно будет сохранить необходимую информацию в самом родительском классе и убедиться, что права доступа установлены правильно (внутренние или публичные, в зависимости от того, как настроен ваш проект), чтобы подкласс мог получить доступ иизменить эти данные.

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

...