两个对象之间的通信,也可以通过delegate传值(同步异步都可以)
第一步,声明协议:
protocol ModelDelegate{
func getModelData(string:String)
}
第二步,要传值的类定义协议:
class Model {
var delegate:ModelDelegate?
func getData(){
//这里是异步更新数据的方式
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)) { () -> Void in
delegate?.getModelData("12345678")
}
}
}
第三步:要传值的类中实现协议:
class ViewController: UIViewController,ModelDelegate {
//定义model对象
var model:Model!
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//初始化然后将其委托给本类,和大部分UIKit中得控件的数据源,delegate用法一样
model = Model()
model.delegate = self
}
//实现的协议方法
func getModelData(string: String) {
//这点尤其注意,更新UI必须在主线程中,不然会有错误,在xcode7中。
dispatch_async(dispatch_get_main_queue()) { () -> Void in
self.label.text = string
}
}
//点击按钮加载数据
@IBAction func btnClicked(sender: AnyObject) {
model.getData()
}
}