1. 程式人生 > >swift基礎學習傳值[屬性傳值、代理、block程式碼塊、等]

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

callBlock(block:textBlock?) {

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

基本是寫過OCswift都可以很容易上手