swift extension【输入下标获得下标的数字】

扩展为现有的类,结构体,枚举类型,或协议添加了新功能,这也包括了为无访问权限源代码类扩展的能力,(即所谓的逆向建模)

扩展和Obective-C中的category类似,(与oc的分类不同的是,swift的扩展没有名字。)

extension的能力。

添加计算实例属性和计算类型属性,

//: A UIKit based Playground for presenting user interface

import UIKit
extension Double {
    var km:Double {
        return self*1_000.0
    }
    var m: Double{return self}
    var nm:Double {return self/100.0}
    var ft:Double{return self/2.28084}
}
let oneInch = 25.4.m
print("One inch is \(oneInch) meters")
let threeFeet = 3.ft
print("Three feet is \(threeFeet) meters")
One inch is 25.4 meters
Three feet is 1.3153048876729625 meters

 

定义实例方法和类型方法

//: A UIKit based Playground for presenting user interface

import UIKit
extension Int{
    func repetitions(task:()->Void){
        for _ in 0..<self{
            task()
        }
    }
}
3.repetitions {
    print("嘿嘿")
}
嘿嘿
嘿嘿
嘿嘿

 

提供新初始化器。

//: A UIKit based Playground for presenting user interface

import UIKit
struct Size{
    var width = 0.0,height = 0.0
}
struct Point {
    var x = 0.0,y=0.0
}
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)
    }
}
let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))

定义下标

 输入下标返回下标位数的数字

//: A UIKit based Playground for presenting user interface

import UIKit
extension Int{
    subscript(digitIndex:Int)->Int{
    
        var decimalBase = 1
        for _ in 0 ..< digitIndex{
            decimalBase *= 10
        }
        return (self/decimalBase) % 10
    }
}


12312414[0]
12312414[1]
12312414[2]



 

定义和使用新内嵌类型

//: A UIKit based Playground for presenting user interface

import UIKit
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
        }
    }}

使用现有的类型遵循某协议,

扩展可以向一个类型添加新的方法,但是不能重写已有的方法

mutating方法

扩展的实例方法仍可以修改或异变实例本身,结构体和枚举类型方法在修改self或本身的属性时必须标记实例方法为mutating,和原本实现一样

//: A UIKit based Playground for presenting user interface

import UIKit
extension Int{
    mutating func square(){
        self = self * self
    }
}

var someInt = 3
someInt.square()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值