swift2.0學習之拓展
阿新 • • 發佈:2017-05-20
swift 方法 post var nes while code 算法 ive
(二)構造器
(三)方法
someInt.square()實例方法調用後,someInt實例本身發生了改變
能夠隨便拿幾個數字試試:
(五)嵌套
拓展:和oc的拓展方法功能差點兒相同。就是給已經存在的類,結構體。枚舉,協議類型添加新的方法
拓展語法:
用extensionkeyword聲明:
extension SomeType {
// new functionality to add to SomeType goes here
}
拓展能夠:
(1)加入計算型屬性和計算屬性
(2)提供新的構造器
(3)定義實例方法和類型方法
(4)定義下標
(5)定義和使用嵌套類型
(一)計算型屬性
extension Double { var km: Double { return self*1_000 } var m: Double { return self } var cm: Double { return self/100 } var mm: Double { return self/1_000 } var ft: Double { return self/3.28084 } }
let oneInch = 25.4.km print("One inch is \(oneInch) meters") let threeFeet = 3.ft print("Three is \(threeFeet) meters")
(二)構造器
struct Rect { var origin = Point() var size = Size() } extension Rect { init(center: Point, size: Size) { let originX = center.x - (size.width / 2) let originY = center.y - (size.height / 2) self.init(origin: Point(x: originX, y: originY), size: size) } }<pre name="code" class="plain"> 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 { func repetitions(task: () -> Void) { for _ in 0..<self { task() } } }
3.repetitions({ print("hello!") })
b,改變實例方法
extension修飾的實例方法能夠改變實例本身,正如結構體和枚舉。想改變自身的屬性和方法,就必須在實例方法前面加mutatingkeyword,好像是從原始實現改變了方法一樣
extension Int { mutating func square() { self = self * self } }
var someInt = 5 someInt.square() print(someInt)
someInt.square()實例方法調用後,someInt實例本身發生了改變
(四)下標
拓展能夠給已經存在的類型添加下標。以下通過一個Int型栗子給其加入內聯下標。這個下標所取的值是從數字右邊開始算起的
比方12345[0]返回的值是5
這個算法就是取這個數字某一位上的數。取個位數的話直接%10就好,取十位上的數就是先除10在%10。取百位上的數就是先/100再%10,等等。
。。
所以拓展代碼是:
extension Int { subscript(var digitIndex: Int) -> Int { var decimalBase = 1 while digitIndex > 0 { decimalBase *= 10 --digitIndex } return (self / decimalBase) % 10 } }
能夠隨便拿幾個數字試試:
231[0] 534[1] 14597346[3] print("\(231[0]), \(534[1]), \(14597346[3])",appendNewLine:false)
(五)嵌套
我們能夠在已經存在的類,結構體,枚舉中拓展嵌套
extension Int { enum Kind { case Negative, Zero, Positive } var kind: Kind { switch self{ case 0: return .Zero case let x where x > 0: return .Positive default: return .Negative } } }
func printIntegerKinds(numbers: [Int]) { for number in numbers { switch number.kind { case .Negative: print("- ", appendNewline: false) case .Zero: print("0 ", appendNewline: false) case .Positive: print("+ ", appendNewline: false) } } print("") }
printIntegerKinds([3, 19, -27, 0, -6, 0, 7])
swift2.0學習之拓展