Swift3.0-學(xué)習(xí)之路之傳值(屬性、代理诽嘉、閉包、通知)

屬性傳值:

顧名思義弟翘,常用的就是從前往后傳值虫腋;屬性傳值一共分為三步:
1、定義一個(gè)要與傳值數(shù)據(jù)類型相同的屬性
2稀余、給屬性賦值
3悦冀、取出屬性中的值

// 隨便寫的一個(gè)方法
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    //同OC一樣,首先給要跳轉(zhuǎn)到的頁面初始化
    let pushVC = PushViewController()
    //str: 下個(gè)界面的屬性睛琳,將"屬性傳值" 這個(gè)字符串傳到下個(gè)界面
    pushVC.str = "屬性傳值"
    //跳轉(zhuǎn)
    self.navigationController?.pushViewController(pushVC, animated: true)
}

跳轉(zhuǎn)到改界面

class PushViewController: UIViewController {
    //屬性傳值
    //此處定義的str盒蟆,為的是在上個(gè)界面跳轉(zhuǎn)的時(shí)候要傳的屬性
    var str: String!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        print("str:=====\(str)")
    }
}
屬性傳值

代理傳值:

1、定義協(xié)議
2师骗、定義代理屬性
3历等、代理對象所在類遵循協(xié)議
4、代理對象所在類遵循協(xié)議
5辟癌、代理對象所在類實(shí)現(xiàn)協(xié)議中的方法
6寒屯、通知代理對象干活

//代理傳值1:
//首先定義一個(gè)協(xié)議
protocol PushViewControllerDeleget {
    //需要遵守的協(xié)議方法
    func sendValue(text:String)
}

//代理傳值2:
//此處可以理解為OC中的(@property(nonatomic,weak) id<PushViewControllerDeleget>delegate;)
var delegate: PushViewControllerDeleget!

//代理傳值3
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        //此行代碼可以理解為在OC中的:
        /**
        if ([self.delegate respondsToSelector:@selector(sendValue:text)]) {
            [self.delegate sendValue:text];
        }
        */
        self.delegate.sendValue(text: "代理傳值")
        self.navigationController?.popViewController(animated: true)
    }

//代理傳值4:
//跟OC一樣,想讓誰遵守協(xié)議黍少,就寫在哪里(注意是用","分開)
class HomeViewController: UIViewController, PushViewControllerDeleget { }

//代理傳值5
class HomeViewController: UIViewController, PushViewControllerDeleget {

    /** 注意:遵守的協(xié)議方法要寫在這里寡夹,寫在" viewDidLoad "里面是報(bào)錯(cuò)的 */
    // 定義一個(gè)label,假如傳值給label
    var lable = UILabel()   
    //遵守協(xié)議方法:sendValue
    func sendValue(text: String) {
        //text:為傳過來的值厂置,將text的值 賦值給lable.text
        lable.text = text
        print(lable.text!)
    }
}
代理傳值

閉包傳值

從后往前傳值
1菩掏、定義一個(gè)閉包屬性
2、在前一個(gè)界面為閉包屬性賦值
3昵济、在pop回去之前調(diào)用閉包

//閉包傳值1:
//定義一個(gè)閉包
var value: ((String) ->())!

//閉包傳值2:
let pushVC = PushViewController()
pushVC.value = { (text: String) in
    // 取出參數(shù)智绸,為前一個(gè)界面的賦值
    self.lable.text = text
    print(self.lable.text!)
}

//閉包傳值3:
self.value("閉包傳值")
閉包傳值

NotificationCenter傳值

注意:Swift3.0之后野揪,這里不再是NSNotificationCenter了,方法變動很大传于。
通知使用步驟:注冊通知 -> 發(fā)送通知 -> 移除通知

  • 注冊通知
//注冊成為觀察者
//參數(shù)1:觀察者對象
//參數(shù)2:消息中心發(fā)送消息的時(shí)候觀察者會自動調(diào)用的方法對應(yīng)的selector(觀察者接收到消息后會調(diào)用的方法)-->必須帶一個(gè)參數(shù)囱挑,并且參數(shù)的類型是NSNotification
//參數(shù)3:觀察者要觀察的消息的名字
NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "notifyName"), object: nil, queue: OperationQueue.main) { (note) in
         //這里拿到通知傳來的數(shù)據(jù)text,然后進(jìn)行邏輯處理,  我們這里只是打印傳過來的內(nèi)容
         print("\(String(describing: note.userInfo?["text"])))")
}
  • 發(fā)送通知
//使用消息中心發(fā)送消息(消息的內(nèi)容就是要傳的值)
//a.拿到消息中心(單例對象)NotificationCenter.default
//b.發(fā)送消息
//NSNotification.Name(rawValue:"notifyName") 消息名,Swift3.0之后的寫法
//userInfo:要發(fā)送的消息的內(nèi)容
NotificationCenter.default.post(name: NSNotification.Name(rawValue:"notifyName"), object: self, userInfo: ["text":"這是一個(gè)通知"])
  • 移除通知
    deinit {
        //方式1:直接self
        NotificationCenter.default.removeObserver(self)
        //方式2:移除指定的名字notifyName
        //NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "notifyName"), object: nil)
    }

通知傳值

到這里,常用的幾種傳值的簡單使用就介紹完了沼溜。
代碼:https://github.com/Baiyongyu/Swift-RootController.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末平挑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子系草,更是在濱河造成了極大的恐慌通熄,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件找都,死亡現(xiàn)場離奇詭異唇辨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)能耻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門赏枚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晓猛,你說我怎么就攤上這事饿幅。” “怎么了戒职?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵栗恩,是天一觀的道長。 經(jīng)常有香客問我洪燥,道長磕秤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任捧韵,我火速辦了婚禮市咆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纫版。我一直安慰自己床绪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布其弊。 她就那樣靜靜地躺著癞己,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梭伐。 梳的紋絲不亂的頭發(fā)上痹雅,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音糊识,去河邊找鬼绩社。 笑死摔蓝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愉耙。 我是一名探鬼主播贮尉,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朴沿!你這毒婦竟也來了猜谚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赌渣,失蹤者是張志新(化名)和其女友劉穎魏铅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坚芜,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡览芳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸿竖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沧竟。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缚忧,靈堂內(nèi)的尸體忽然破棺而出屯仗,到底是詐尸還是另有隱情,我是刑警寧澤搔谴,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站桩撮,受9級特大地震影響敦第,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜店量,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一芜果、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧融师,春花似錦右钾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怀伦,卻和暖如春脆烟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背房待。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工鹃栽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人券腔。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓亿笤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親顶霞。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容