二十三 面向協議程式設計

2021-10-24 17:32:17 字數 1590 閱讀 8402

的注意點

/*a.有限考慮建立協議,而不是父類(基類)。

b.優先考慮值型別(struct、enum),而不是引用型別。

c.巧用協議的拓展功能。

d.不要為了面向協議而使用協議。

*///6.利用協議實現字首效果

//字首型別

struct mj

}//利用協議拓展字首屬性

protocol mjcompatibble {}

extension mjcompatibble //為了mutating語法能通過

get

}var mj: mj

get }}

//給字串拓展功能

//讓string擁有mj字首屬性

extension string: mjcompatibble {}

extension nsstring: mjcompatibble {}

//給string.mj、string().mj字首拓展功能

extension mj where base: expressiblebystringliteral

return count

}mutating func run() {}

static func test() {}

}var str1 = "123123"

var str2: nsstring = "123123"

var str3: nsmutablestring = "123123"

str1.mj.run() //"123123"mj.run() 報錯

print(str1.mj.numbercount)

print(str2.mj.numbercount)

print(str3.mj.numbercount)

//7.利用協議實現型別判斷

func isarray(_ value: any) -> bool

print(isarray([1, 2])) //true

print(isarray(["1", 2])) //true

print(isarray(nsarray())) //true

print(isarray(nsmutablearray())) //true

print(isarray("123123")) //false

protocol arraytype {}

extension array: arraytype {}

extension nsarray: arraytype {}

func isarraytype(_ type: any) -> bool

print(isarraytype([int].self)) //true

print(isarraytype([double].self))//true

print(isarraytype([any].self))//true

print(isarraytype(nsarray.self))//true

print(isarraytype(nsmutablearray.self))//true

print(isarraytype(string.self))//false

物件導向 多型 二十三

一.多型的概述及其 體現 a 多型 polymorphic 概述 事物存在的多種形態 b 多型前提 a 要有繼承關係。b 要有方法重寫。c 要有父類引用指向子類物件。class demo1 polymorphic class animal class cat extends animal 二.多型中...

十三 物件導向程式設計

1 物件導向基本概念 物件導向的意義在於 類和物件是物件導向中的兩個基本概念 乙個類可以有很多物件,而乙個物件必然屬於某個類 類之間的基本關係 組合 繼承是單向的,子類繼承父類所有的屬性和行為 include struct biology struct animal biology struct p...

shell程式設計題(二十三)

題目 設計乙個shell程式,在每月第一天備份並壓縮 etc目錄的所有內容,存放在當前目錄下 root bak root目錄需要存在 目錄裡,且檔名,為如下形式yymmdd etc,yy為年,mm為月,dd為日。shell程式fileback存放在 usr bin目錄下。答案 bin bash di...