swift中的代理傳值跟oc中的用法基本一樣,都是用于反向傳值,這里假設a界面向b界面傳值為正向傳值,則:
在b界面
//設置代理方法
protocol BaseOneControllerDelegate {
? ? ? ? ? func sendMessage(message:NSString?)
}
class BaseOneController: UIViewController {
//定義代理屬性
var delegate:BaseOneControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
let segMentArray = ["代理返回"]
segment = UISegmentedControl(items: segMentArray)
segment.frame = CGRect.init(x: 0, y: 100, width: kWidth, height: 30)
//添加動作事件
segment.addTarget(self, action: #selector(BaseOneController.segmentAction(sender:)), for: UIControlEvents.valueChanged)
self.view.addSubview(segment)
}
func segmentAction(sender:UISegmentedControl) {
print("我點擊了第 \(sender.selectedSegmentIndex) 選項")
? if sender.selectedSegmentIndex == 0 {
//完成代理事件
? ? ? if (delegate != nil) {
? ? ? ? self.delegate?.sendMessage(message: "代理傳值成功,點擊返回按鈕")
? ? ? _ = self.navigationController?.popViewController(animated: true)
? }
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
在a界面,首先添加b界面的代理BaseOneControllerDelegate
let baseOne = BaseOneController()
//跳轉的時候記得設置好代理
baseOne.delegate = self
self.navigationController?.pushViewController(baseOne, animated: true)
//代理方法
func sendMessage(message: NSString?) {
print("\(message)")
}