拓展:和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 intvar 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...