swift2 0學習之拓展

2021-07-04 09:35:24 字數 1968 閱讀 4822

拓展:和oc的拓展方法功能差不多,就是給已經存在的類,結構體,列舉,協議型別增加新的方法

拓展語法:

用extension關鍵字宣告:

extension

sometype

拓展可以:

(1)新增計算型屬性和計算屬性

(2)提供新的構造器

(3)定義例項方法和型別方法

(4)定義下標

(5)定義和使用巢狀型別

(一)計算型屬性

extension double 

var m: double

var cm: double

var mm: double

var ft: double

}

let oneinch = 25.4.km

print("one inch is \(oneinch) meters")

let threefeet = 3.ft

print("three is \(threefeet) meters")

(二)構造器

struct rect 

extension rect

}var someint = 5

someint.square()

print(someint)

//        let defaultrect = rect()

// let memberwiserect = rect(origin: point(x: 2.0, y: 2.0), size: size(width: 3.0, height: 3.0))

let centerrect = rect(center: point(x: 4.0, y: 4.0), size: size(width: 3.0, height: 3.0))

print("\(centerrect.origin),\(centerrect.size)")

(三)方法

a.例項方法的栗子

extension int 

}

var someint = 5

someint.square()

print(someint)

someint.square()例項方法呼叫後,someint例項本身發生了改變

(四)下標

拓展可以給已經存在的型別增加下標。下面通過乙個int型栗子給其新增內聯下標,這個下標所取的值是從數字右邊開始算起的

比如12345[0]返回的值是5

這個演算法就是取這個數字某一位上的數,取個位數的話直接%10就好,取十位上的數就是先除10在%10,取百位上的數就是先/100再%10,等等。。。

所以拓展**是:

extension int 

return (self / decimalbase) % 10

}}

可以隨便拿幾個數字試試:

231[0]

534[1]

14597346[3]

(五)巢狀

我們可以在已經存在的類,結構體,列舉中拓展巢狀

extension int 

var kind: kind

}}

func printintegerkinds(numbers: [int]) 

}print("")

}

printintegerkinds([3, 19, -27, 0, -6, 0, 7])

swift2 0 學習筆記Two

var myarray 1,4,6,5,2 var sc 0 for str in myarray sc 1 print myarray,string sc 1,4,16,15,2 5 let optionalstr string?hello world print optionalstr nil ...

swift2 0 學習筆記four

override func viewdidload one two three let mychatacters character d l g let str string mychatacters print str dlg 建立乙個帶有預設值的陣列 let tt double count 6 ...

swift2 0 學習筆記Thirteen

import uikit class viewcontroller uiviewcontroller else 該閉包引用了 self 即強引用了 htmlelement 例項,lazy var ashtml void string 該變數又強引用了閉包 paragraph nil 不會觸發 dei...