Swift3.0函數(shù)的類 協(xié)議 代理設(shè)計(jì)模式

//類 協(xié)議? 代理設(shè)計(jì)模式 閉包

import Foundation

//類:具有相同特征和行為的事物抽象

//根據(jù)類創(chuàng)建的實(shí)例就是對象

//類的創(chuàng)建格式

/*class 類名: 父親 {

屬性

行為

}*/

//人類:Person 屬性:姓名,性別,年齡? 行為:吃飯,睡覺

//NSObject也是swift中所有的根類(基類)

class Person: NSObject {

//屬性

//1

//swift中不允許非可選類型的屬性不賦初始值

//直接給初始值

//var name:String = "韓沉"

//2

/* var name:String

//在初始化方法中,給屬性賦值

init(name:String){

self.name = name

}*/

//3 屬性為可選類型

//var name:String?

//4 隱士解析類型

var name:String!

var age:Int!

var gender:String!

//類型屬性

static var color:String!

//提供一個(gè)快速創(chuàng)建對象的初始化放法

init(name:String,age:Int,gender:String) {

self.name = name

self.age = age

self.gender = gender

}

//行為(方法)

func eat()? {

print("韓塵很帥")

}

func sleep ()? {

print("韓沉睡覺也很帥")

}

//類方法

static func daDouDou(){

print("打豆豆")

}

}

//創(chuàng)建一個(gè)對象

let p = Person(name: "韓沉", age: 26, gender: "男")

print(p.name,p.age,p.gender)

p.eat()

p.sleep()

//訪問類屬性

Person.color = "黃色"

print(Person.color)

//調(diào)用類方法

Person.daDouDou()

class Student: Person {

var number:Int!

func study()? {

print("抓壞人,好警察")

}

//重寫父類繼承過來的方法

override func eat() {

super.eat()

print("吃食堂")

}

}

let stu = Student(name: "韓沉", age: 26, gender: "男")

stu.number = 100101

stu.study()

print(stu.name,stu.age,stu.gender)

stu.eat()

stu.sleep()

//協(xié)議? 代理設(shè)計(jì)模式

//oc下的協(xié)議

@objc protocol GirlDelegate {

//協(xié)議中只寫函數(shù)的聲明

func makeMoney()//必須實(shí)現(xiàn)的方法

//選擇實(shí)現(xiàn)的方法

@objc optional func wish()

@objc optional func cook()

@objc optional func doHousework()

}

class Girl: NSObject {

//設(shè)置代理屬性

//女孩想買東西男朋友掙錢

var delegate:GirlDelegate!

func buySomething(){

//男朋友掙錢

self.delegate.makeMoney()

}

//女孩餓了

func hungry()? {

self.delegate.cook!()

}

//女孩有臟衣服

func youZangyifu()? {

self.delegate.wish!()

}

//女孩家里臟了

func clearHome()? {

self.delegate.doHousework!()

}

}

//遵循協(xié)議

class Boy: NSObject,GirlDelegate {

func makeMoney() {

print("一天1000元")

}

func cook() {

print("甜點(diǎn)")

}

func wish() {

print("手洗")

}

func doHousework() {

print("找保潔")

}

}

let suMian = Girl()

let hanchen = Boy()

//給代理屬性賦值

suMian.delegate = hanchen

//sumian發(fā)號(hào)施令

suMian.buySomething()

suMian.hungry()

suMian.youZangyifu()

suMian.clearHome()

/**

代理設(shè)計(jì)模式的步驟

1.設(shè)計(jì)協(xié)議

2.設(shè)置代理屬性

3.遵循協(xié)議

4.實(shí)現(xiàn)協(xié)議中的方法

5.在外界指定代理屬性(給代理屬性賦值)

6.告訴代理對象什么時(shí)候干活

*/

//制定一個(gè)保姆的協(xié)議{做飯,做家務(wù),照顧孩子

}

//設(shè)計(jì)一個(gè)Hostess 發(fā)出協(xié)議 設(shè)置一個(gè)保姆類 遵循協(xié)議

*/

//swift中的協(xié)議代理格式,協(xié)議中的方法都是必須實(shí)現(xiàn)的

protocol HostessDelegate{

func doHousework()

func cook()

func takeCarebaby()

}

class Hostess: NSObject{

//定義代理屬性

var delegate:HostessDelegate!

func clearHome()? {

self.delegate.doHousework()

}

func erLe()? {

self.delegate.cook()

}

func haiZi()? {

self.delegate.takeCarebaby()

}

}

//給NSObject擴(kuò)充方法

extension NSObject{

func sayHello()? {

print("你好濟(jì)寧師范")

}

}

class Nanny: NSObject{

}

let n = Nanny()

n.sayHello()

//延展:用來擴(kuò)充一個(gè)類,主要用來管理類的方法或者遵循某個(gè)協(xié)議中的方法

//3.遵循協(xié)議

extension Nanny : HostessDelegate{

//4.實(shí)現(xiàn)協(xié)議中的方法

func doHousework() {

print("做家務(wù)")

}

func cook() {

print("做飯")

}

func takeCarebaby() {

print("照顧小孩")

}

}

let cuiHua = Hostess()

let ruHua = Nanny()

//給代理屬性賦值

cuiHua.delegate = ruHua

cuiHua.clearHome()

cuiHua.erLe()

cuiHua.haiZi()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容