Class swift ios委托在多个类中同时运行
啊 我正在使用学习swift的教程,现在我想知道这是否可行 或者如何以更好的方式实现这一点 斯威夫特Class swift ios委托在多个类中同时运行,class,swift,delegates,Class,Swift,Delegates,啊 我正在使用学习swift的教程,现在我想知道这是否可行 或者如何以更好的方式实现这一点 斯威夫特 protocol AControllerProtocol { func updateGui() } class AController { func doSomething(){ // here I get incomming data and other stuff // then the gui in multiple views needs an upda
protocol AControllerProtocol {
func updateGui()
}
class AController {
func doSomething(){
// here I get incomming data and other stuff
// then the gui in multiple views needs an update
self.delegate.updateGui()
}
var delegate: AControllerProtocol
init(delegate: AControllerProtocol) {
self.delegate = delegate
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// works, it runs this method and this tables is inside this BViewController
// })
}
}
class CViewController: AController {
lazy var acontroller : AController = AController(delegate: self)
@IBOutlet weak var tracksTableView: UITableView!
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tracksTableView!.reloadData()
// din't run, this table is only in this CViewController
// it only did run BViewController updateGui()
// })
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// get to know how to do this here
CViewController.tracksTableView!.reloadData()
// })
}
}
class CViewController {
@IBOutlet weak var tracksTableView: UITableView!
}
BViewController.swift
protocol AControllerProtocol {
func updateGui()
}
class AController {
func doSomething(){
// here I get incomming data and other stuff
// then the gui in multiple views needs an update
self.delegate.updateGui()
}
var delegate: AControllerProtocol
init(delegate: AControllerProtocol) {
self.delegate = delegate
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// works, it runs this method and this tables is inside this BViewController
// })
}
}
class CViewController: AController {
lazy var acontroller : AController = AController(delegate: self)
@IBOutlet weak var tracksTableView: UITableView!
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tracksTableView!.reloadData()
// din't run, this table is only in this CViewController
// it only did run BViewController updateGui()
// })
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// get to know how to do this here
CViewController.tracksTableView!.reloadData()
// })
}
}
class CViewController {
@IBOutlet weak var tracksTableView: UITableView!
}
CViewController.swift
protocol AControllerProtocol {
func updateGui()
}
class AController {
func doSomething(){
// here I get incomming data and other stuff
// then the gui in multiple views needs an update
self.delegate.updateGui()
}
var delegate: AControllerProtocol
init(delegate: AControllerProtocol) {
self.delegate = delegate
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// works, it runs this method and this tables is inside this BViewController
// })
}
}
class CViewController: AController {
lazy var acontroller : AController = AController(delegate: self)
@IBOutlet weak var tracksTableView: UITableView!
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tracksTableView!.reloadData()
// din't run, this table is only in this CViewController
// it only did run BViewController updateGui()
// })
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// get to know how to do this here
CViewController.tracksTableView!.reloadData()
// })
}
}
class CViewController {
@IBOutlet weak var tracksTableView: UITableView!
}
如你所见,我有两种观点:
BViewController.swift
protocol AControllerProtocol {
func updateGui()
}
class AController {
func doSomething(){
// here I get incomming data and other stuff
// then the gui in multiple views needs an update
self.delegate.updateGui()
}
var delegate: AControllerProtocol
init(delegate: AControllerProtocol) {
self.delegate = delegate
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// works, it runs this method and this tables is inside this BViewController
// })
}
}
class CViewController: AController {
lazy var acontroller : AController = AController(delegate: self)
@IBOutlet weak var tracksTableView: UITableView!
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tracksTableView!.reloadData()
// din't run, this table is only in this CViewController
// it only did run BViewController updateGui()
// })
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// get to know how to do this here
CViewController.tracksTableView!.reloadData()
// })
}
}
class CViewController {
@IBOutlet weak var tracksTableView: UITableView!
}
- 桌面视图
protocol AControllerProtocol {
func updateGui()
}
class AController {
func doSomething(){
// here I get incomming data and other stuff
// then the gui in multiple views needs an update
self.delegate.updateGui()
}
var delegate: AControllerProtocol
init(delegate: AControllerProtocol) {
self.delegate = delegate
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// works, it runs this method and this tables is inside this BViewController
// })
}
}
class CViewController: AController {
lazy var acontroller : AController = AController(delegate: self)
@IBOutlet weak var tracksTableView: UITableView!
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tracksTableView!.reloadData()
// din't run, this table is only in this CViewController
// it only did run BViewController updateGui()
// })
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// get to know how to do this here
CViewController.tracksTableView!.reloadData()
// })
}
}
class CViewController {
@IBOutlet weak var tracksTableView: UITableView!
}
- tracksTableView
protocol AControllerProtocol {
func updateGui()
}
class AController {
func doSomething(){
// here I get incomming data and other stuff
// then the gui in multiple views needs an update
self.delegate.updateGui()
}
var delegate: AControllerProtocol
init(delegate: AControllerProtocol) {
self.delegate = delegate
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// works, it runs this method and this tables is inside this BViewController
// })
}
}
class CViewController: AController {
lazy var acontroller : AController = AController(delegate: self)
@IBOutlet weak var tracksTableView: UITableView!
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tracksTableView!.reloadData()
// din't run, this table is only in this CViewController
// it only did run BViewController updateGui()
// })
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// get to know how to do this here
CViewController.tracksTableView!.reloadData()
// })
}
}
class CViewController {
@IBOutlet weak var tracksTableView: UITableView!
}
然后我想,也许这不是正确的方法(将更新推到其他类)
另一个简单的解决方案是这样的
BViewController.swift
protocol AControllerProtocol {
func updateGui()
}
class AController {
func doSomething(){
// here I get incomming data and other stuff
// then the gui in multiple views needs an update
self.delegate.updateGui()
}
var delegate: AControllerProtocol
init(delegate: AControllerProtocol) {
self.delegate = delegate
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// works, it runs this method and this tables is inside this BViewController
// })
}
}
class CViewController: AController {
lazy var acontroller : AController = AController(delegate: self)
@IBOutlet weak var tracksTableView: UITableView!
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tracksTableView!.reloadData()
// din't run, this table is only in this CViewController
// it only did run BViewController updateGui()
// })
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// get to know how to do this here
CViewController.tracksTableView!.reloadData()
// })
}
}
class CViewController {
@IBOutlet weak var tracksTableView: UITableView!
}
CViewController.swift
protocol AControllerProtocol {
func updateGui()
}
class AController {
func doSomething(){
// here I get incomming data and other stuff
// then the gui in multiple views needs an update
self.delegate.updateGui()
}
var delegate: AControllerProtocol
init(delegate: AControllerProtocol) {
self.delegate = delegate
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// works, it runs this method and this tables is inside this BViewController
// })
}
}
class CViewController: AController {
lazy var acontroller : AController = AController(delegate: self)
@IBOutlet weak var tracksTableView: UITableView!
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tracksTableView!.reloadData()
// din't run, this table is only in this CViewController
// it only did run BViewController updateGui()
// })
}
}
class BViewController: AController {
@IBOutlet var tableView: UITableView!
var acontroller : AController?
override func viewDidLoad() {
super.viewDidLoad()
acontroller = AController(delegate: self)
}
func updateGui() {
// dispatch_async(dispatch_get_main_queue(), {
self.tableView!.reloadData()
// get to know how to do this here
CViewController.tracksTableView!.reloadData()
// })
}
}
class CViewController {
@IBOutlet weak var tracksTableView: UITableView!
}
您好,
Martijn看看NotificationCenter 控制器可以在数据到达时发出通知,并将其发送到通知中心
B和C视图控制器可以侦听该通知,并使用NotificationCenter添加一个观察者。它们的处理程序将在发布通知时触发 这就是我需要的,现在只需要学习如何使用这些东西,哈哈。它们非常简单: