屬性觀察者(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
相關推薦
屬性觀察者(willSet與didSet)
//: 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.NET(Ioc與DI)的使用步驟
寫入 邏輯 麻煩 今天 人員 feature 屬性註入 節點 問題 那今天就介紹一下我理解的Spring.net吧。介紹Spring.NET之前,先談點其他的。我們都知道,.NET有一個基本原則“高內聚,低耦合“。關於這個概念,想必大家都知道。所謂高內聚,也就
繼承(is與as)
col dog 類型強制轉換 animal pan round int 檢查 是否 is操作符用於檢查對象和指定的類型是否兼容 as操作符主要用於二個對象之間的類型轉換 //父類 public class Animal { public int
Filebeat 關鍵字多行匹配日誌采集(multiline與include_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
越困難越容易激發動力(Git與github)
總結 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‘,
方法的重寫與重載的區別(Override與Overload)。重載的方法是否可以改變返回值的類型
改變 父類 div 之間 如果 如同 java 調用 ava 方法的重寫(Override)與重載(Overload)的區別。重載的方法是否可以改變返回值的類型?【基礎】 解釋: 方法的重寫overriding和重載Overloading是Java多態性的不同表現。 1、重
異構關系數據庫(MySql與Oracle)之間的數據類型轉換參考
轉變 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 對於四川同胞遭受的災難,全國人民紛紛伸出援助之手,幾乎每個省