swift基礎學習傳值[屬性傳值、代理、block程式碼塊、等]
傳值:在此之前我們先定義兩個檢視控制器ViewController ViewController01
1.屬性傳值正向、這裡以字串做例子、其他型別類似:ViewController->>>ViewController01
ViewController:
let vc = ViewController01()
vc.str ="hello"
self.navigationController?.pushViewController(vc, animated:true)
ViewController01:
class ViewController01: UIViewController
var str =NSString()
overridefunc viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor =UIColor.white
print(self.str)
}
overridefunc didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
2.程式碼塊反向傳值
ViewController
func click() {
let vc =ViewController01()
vc.callBlock{(value: String?) ->Voidin
print(value)
}
self.navigationController?.pushViewController(vc, animated:true)
}
ViewController01:
首先定義程式碼塊型別:typealias textBlock = (String)->()
然後定義程式碼塊屬性:var block:textBlock?
實現程式碼塊
func
self.block = block
}
func click() {
if let block = self.block {
block("li01")
}
self.navigationController?.popToRootViewController(animated:true)
}
3.delegate反向傳值(協議)
ViewController:首先要繼承ViewController01中的協議giveFirstStrDelegate
func click() {
let vc =ViewController01()
vc.delegate = self
self.navigationController?.pushViewController(vc, animated:true)
}
代理方法
func giveStr(controller: ViewController01, string: String) {
print(string)
}
ViewController01:
首先定義個協議
protocol giveFirstStrDelegate:NSObjectProtocol {
func giveStr(controller:ViewController01,string:String)
}
var delegate:giveFirstStrDelegate?
這些類似與OC中的代理實現
func click() {
if((delegate) !=nil){
delegate?.giveStr(controller:self,string:"hi I am li")
}
self.navigationController?.popToRootViewController(animated:true)
}
4.通知中心傳值參考OC
5.單列傳值也同樣參考OC
基本是寫過OC的swift都可以很容易上手