我有两个视图控制器。VC1&VC2VC1正在传递一个变量,该变量在VC1上每秒都在变化和更新,在我的例子中,它是最近的信标,由VC1中的方法处理。
VC1代码:

  var id: Int = 0 // initializing

  // send data to VC2
  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let vc2 = segue.destination as? navigationScreenVC else { return }
      vc2.id2 = id
    }


VC2代码:
  var id2: Int = 0

  override func viewDidLoad() {
    super.viewDidLoad()
    print(VC2)
  }

它在发送遇到的第一个值时工作,但在值不断更改时不工作,所以我希望在触发更改时立即发送该值。
我试着去做,但不是那样的。

最佳答案

使用委托模式。
在VC2中:

protocol VC2Delegate: class {
  var id2: Int { get }
}

class VC2 {
  weak var delegate: VC2Delegate?

  override func viewDidLoad() {
    super.viewDidLoad()
    print(delegate?.id2)
  }
}

在VC1中:
class VC1: UIViewController, VC2Delegate {
...
  var id2: Int = 0

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let vc2 = segue.destination as? navigationScreenVC else { return }
    vc2.delegate = self
  }
...
}

关于swift - 如何在两个 View Controller 之间传递(更改)变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57189850/

10-12 14:36