1. 程式人生 > >屬性觀察者(willSet與didSet)

屬性觀察者(willSet與didSet)

//: Playground - noun: a place where people can play

//import UIKit
//
//var str = "Hello, playground"

/*
 屬性觀察者,類似於觸發器。用來監視屬性的初始化之外的屬性值變化,當屬性值發生改變時可以對此做出響應。有如下特點
 1.不僅可以在屬性值改變後觸發didSet,也可以在屬性值改變前觸發willSet。
 2.給屬性新增觀察者必須要宣告清楚屬性型別,否則編譯器報錯
 3.willSet可以帶一個newName的引數,沒有的話,該引數預設命名為newValue
 4.didSet可以帶一個oldName的引數,表示舊的屬性,不帶的話預設命名為oldValue
 5.屬性初始化時,willSet和didSet不會呼叫。只有在初始化上下文之外,當設定屬性值時才會呼叫
 6.即使是設定的值和原來的值相同,willSet和didSet也會呼叫
 */
class People { // 普通屬性 var firstName:String = "" var lastName:String = "" var nickName:String = "" // 計算屬性 var fullName:String{ get{ return nickName + " " + firstName + " " + lastName } } // 帶屬性監視器的普通屬性 var age:Int = 0 { // 我們需要在age屬性變化前做點什麼
willSet{ print("Will set an new value \(newValue) to age") } // 我們需要在age屬性發生變化後,更新一下nickname這個屬性 didSet{ print("age filed changed from \(oldValue) to \(age)") if age<10 { nickName = "Little" }else{ nickName = "Big"
} } } func toString() -> String { return "Full Name:\(fullName)" + ", Age:\(age)" } } let me = People() me.firstName = "Zhang" me.lastName = "San" me.age = 22 print(me.toString()) //Full Name:Big Zhang San, Age:22

相關推薦

屬性觀察willSetdidSet

//: Playground - noun: a place where people can play //import UIKit // //var str = "Hello, playground" /* 屬性觀察者,類似於觸發器。用來監視屬性的初始

觀察模式-貓捉老鼠委託事件

貓捉老鼠是一個典型的觀察者模式的實現案例,在其中加入委託與事件的程式實現,將會提高程式碼的一個可讀性,其下是程式碼實現: 建立一個Cat類: using System; using System.

設計模式:觀察Observer模式

image 強制轉換 trace vat PE sta obs observer -a 設計模式:觀察者(Observer)模式 一、前言 觀察者模式其實最好的名稱應該是“發布訂閱”模式,和我們現在大數據之中的發布訂閱方式比較類似,但是也有區別的地方,在上一個設計模式,

Swift:屬性觀察willSet和oldSet

import Foundation class Stepcounter { //  定義一個類,記錄走的步數 var step: Int = 10 { // 注意是這裡初始化的是10 willSet { // 屬性觀察者willSet是定義在變數ste

設計模式的征途—15.觀察Observer模式

在日常生活中,交通訊號燈指揮者日益擁擠的城市交通。紅燈亮,汽車停止;綠燈亮,汽車繼續前行;在這個過程中,交通訊號燈是汽車的觀察目標,而汽車則是觀察者。隨著交通訊號燈的變化,汽車的行為也會隨之變化,一盞交通訊號燈可以指揮多輛汽車。在軟體系統中,有些物件之間也存在類似交通訊號燈和汽車之間的關係,一個物件的狀態或行

行為型設計模式職責鏈模式,命令模式,中介模式,觀察模式,訪問者模式

職責鏈模式 主要用於使多個物件都有機會處理請求,避免請求的的傳送者和接受者之間的耦合關係。在現實生活中我們多數遇到的是不純的責任鏈模式即每個物件都處理請求的一部分後再交給下家。而純的職責鏈模式則要求對於一個請求,要不處理要不就交給下家。具體理解呢。我們可以想一下“擊鼓傳花”

內容提供者ContentProvider和內容觀察ContentObserver的使用以應用鎖為例

內容提供者(ContentProvider) package com.songyan.applock; import android.content.ContentProvider; import android.content.ContentValues; impor

小敘Spring.NETIocDI的使用步驟

寫入 邏輯 麻煩 今天 人員 feature 屬性註入 節點 問題 那今天就介紹一下我理解的Spring.net吧。介紹Spring.NET之前,先談點其他的。我們都知道,.NET有一個基本原則“高內聚,低耦合“。關於這個概念,想必大家都知道。所謂高內聚,也就

繼承isas

col dog 類型強制轉換 animal pan round int 檢查 是否 is操作符用於檢查對象和指定的類型是否兼容 as操作符主要用於二個對象之間的類型轉換 //父類 public class Animal { public int

Filebeat 關鍵字多行匹配日誌采集multilineinclude_lines

filebeat 關鍵字多行匹配日誌采集(multiline與include_lines)很多同事認為filebeat采集日誌不能做到多行處理,今天這裏討論下filebeat的multiline與include_lines。 先來個案例,以下日誌,我們只要求采集error的字段,2017/06/22 11:2

走入計算機的第二十九天繼承派生

利用 過程 調用 概念 針對 sed ive .cn log 一 什麽是繼承 繼承是一種創建新類的方式,在python中,新建的類可以繼承一個或多個父類,父類又可稱為基類或超類,新建的類稱為派生類或子類   單繼承:就相當於子類繼承了一個父類。   多繼承:就相當於子類

Java學習筆記trim()substring()

tro 字符串 n) substr java bsp log 執行 spa 了解到這兩個函數是因為在做OJ的題目時遇到了這樣的情況: 標註輸入為:4 abc 兩種數據用空格分隔開,但找不到只讀一個字符的方法(吃掉中間的空格) trim(): 去掉字符串首尾的空格 St

越困難越容易激發動力Gitgithub

總結 dos 很多 分布式版本控制 name tar 開放 http rbo   看到這次的作業讓我有點頭暈,全是英文,黑屏界面,有點難以上手。但是跟著步驟一步一步的走,還是可以漸漸地學到很多東西。雖然難但是學會的感覺還是很不錯的。   是Git是一款免費、開源的分布式版本

交換機&路由器&ARP欺騙攻擊工作原理

交換機 路由器 工作原理交換機工作原理(端口MAC----端口MAC) 交換機根據MAC地址表智能轉發數據幀 根據源MAC地址,自動添加到MAC地址表 根據目的MAC地址,在則轉發,不在則泛洪2.路由器工作原理:(ip---端口) 根據路由表轉發數據包,有則轉發,沒有就丟棄3.ARP:將一個已知

Array對象的方法總結ES5 ES6

判斷 否則 array 復制 indexof define 字符 red 三個參數 ES5 數組方法 1.Array.isArray() 方法用來判斷一個值是否為數組。它可以彌補typeof運算符的不足 2.valueOf() 方法返回數組本身 3.toString()

SLAM中的變換旋轉位移表示方法

col oat pla gin 分享圖片 lock sla right post 1、旋轉矩陣 註:旋轉矩陣標題下涉及到的SLAM均不包含位移。 根據同一點P在不同坐標系下e(e1,e2,e3)e‘(e1‘,e2‘,e3‘)的坐標a(a1,a2,a3)a‘(a1‘,a2‘,

方法的重寫重載的區別OverrideOverload。重載的方法是否可以改變返回值的類型

改變 父類 div 之間 如果 如同 java 調用 ava 方法的重寫(Override)與重載(Overload)的區別。重載的方法是否可以改變返回值的類型?【基礎】 解釋: 方法的重寫overriding和重載Overloading是Java多態性的不同表現。 1、重

異構關系數據庫MySqlOracle之間的數據類型轉換參考

轉變 times datetime tip table real try ipo all 一、MySQL到Oracle的數據類型的轉變: 編號 MySQL ToOracle Oracle 1 GEOMETRY BLOB BLOB

axios 全攻略之基本介紹使用GET POST

pkg 需要 name comm xmlhttp 基本介紹 markdown pre spa axios axios 是一個基於 Promise 的 HTTP 客戶端,專門為瀏覽器和 node.js 服務 Vue 2.0 官方推薦使用 axios 來代替原來的 Vu

題解報告:hdu 2188 悼念512汶川大地震遇難同胞——選拔誌願巴什博弈

desc 考核 解題思路 bsp c代碼 字符串 每次 代碼 ont 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2188 Problem Description 對於四川同胞遭受的災難,全國人民紛紛伸出援助之手,幾乎每個省