Как изменить значение переменной, объявленной в классе, из другого класса? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть 2 viewcontrollers, в vC1 объявлена ​​переменная isShowListAsked : Bool = false, при нажатии кнопки карты она переходит к vC2.В vC2 есть кнопка с именем Список .Я хочу, чтобы: после нажатия кнопки List он вернулся к значению vC1, и значение переменной vC1 должно измениться на true.Но он все еще остается ложным.

Пожалуйста, помогите мне.

Заранее спасибо.

При нажатии Список кнопка iя могу вернуться к vC1, но не могу установить isShowListAsked = true .я попытался получить {} установить {}.

В vC1:

class vC1 : UIViewController
 {
var isShowListAsked : Bool = false

    var IsShowListAsked : Bool {
        get {
            return isShowListAsked
        }
        set{
            isShowListAsked = newValue
        }
    }
}

Затем после нажатия В vC2:

class vC2 : UIViewController 
{
var vc = vC1()

 @IBAction func mapListSegmentTapped(_ sender: Any) {

       if mapListSegment.selectedSegmentIndex == 1 
     {
       vc.IsShowListAsked = true

        }
        if mapListSegment.selectedSegmentIndex == 0 
      {
            vc.IsShowListAsked = false
        }
   }
}

После возврата я проверяю значение переменнойв поле зрения Willappear ()

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

      print(" isshowListAsked = \(IsShowListAsked) ") // print false
   }

Ожидаемый результат:

print(" isshowListAsked = \(IsShowListAsked) ") // print True

Фактический результат:

print(" isshowListAsked = \(IsShowListAsked) ") // print false

1 Ответ

0 голосов
/ 06 июня 2019

Используйте Closures для решения вашей проблемы.

Создайте closure в VC2 типа ((Bool)->())? и вызовите его с соответствующими значениями true/false вmapListSegmentTapped(_:) метод, то есть

class VC2: UIViewController {
    var handler: ((Bool)->())?

    @IBAction func mapListSegmentTapped(_ sender: Any) {
        if mapListSegment.selectedSegmentIndex == 1 {
            self.handler?(true)
        } else if mapListSegment.selectedSegmentIndex == 0 {
            self.handler?(false)
        }
    }
}

Теперь установите этот closure, когда вы presenting instance из VC2 из VC1 т.е.

class VC1 : UIViewController {
    var isShowListAsked: Bool = false

    func onTapMapButton(_ sender: UIButton) {
        if let controller = self.storyboard?.instantiateViewController(withIdentifier: "VC2") as? VC2 {
            controller.handler = {[weak self] (value) in
                self?.isShowListAsked = value
                print(self?.isShowListAsked) 
            }
            self.present(controller, animated: true, completion: nil)
        }
    }
}
...