Swift_Extension

群组
Flutter,iOS,Android,Python等,闲聊工作&技术&问题;
个人主页:https://waitwalker.cn
telegram群链接:https://t.me/joinchat/Ej0o0A1ntlq5ZFIMzzO5Pw

        Swift Extension 字面意思就是扩展.有点类似OC中Category,按照官方文档,Extension可以用来:

1.添加计算型属性

拓展一下:

        计算型属性:计算型属性不直接存储值,而是提供一个getter和setter来间接获取和设置属性值

var name:String
var _name:String {
set {
name = newValue
}
get {
return name
}
}

        存储型属性:用来存储一个变量或者常量

var name:String = "zhangsan"
let age:Int = 10
// MARK: - 扩展计算型属性
extension UIView {
    var x:CGFloat {
        set{
            self.frame.origin.x = newValue
        }
        get{
           return self.frame.origin.x
        }
    }
}

2.添加方法

扩展实例方法

// MARK: - 扩展实例方法
    func size(height:CGFloat, width:CGFloat) -> CGFloat {
        return height * width
    }

添加突变方法 - mutating method:
        通过extension添加的实例方法同样可以修改(modify)或突变(mutate)该实例本身,如果结构体和枚举定义的方法想要改变自身或自身的属性,那么该实例方法必须被标记为突变(mutating)的。
        下面的例子为Int类型添加了一个名为square的突变方法,它的作用是计算原始值的平方:

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

3.提供便利构造器

// MARK: - 便利构造器
    convenience init(info:[String:String]) {
        self.init()
// todo:

    }

4.定义下标subscripts

        附属脚本可以定义在class,struct,enum中,可以认为是访问对象,集合或者序列的快捷方式,凌辱我们常用的通过所以访问数组中的值,array[index];通过key访问字典中的value,dict[key]等.


// MARK: - 官方示例:计算某个整数第某位上的值
extension Int {
    subscript(digitIndex: Int) -> Int {
        var decimalBase = 1
        for _ in 0..<digitIndex {
            decimalBase *= 10
        }
        return (self / decimalBase) % 10
    }
}

746381295[0]
// returns 5
746381295[1]
// returns 9
746381295[2]
// returns 2
746381295[8]
// returns 7

5.添加嵌套类型

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

6.实现遵守协议的方法

// MARK: - 实现遵守协议的方法
extension UIView:UITableViewDataSource {

    public func numberOfSections(in tableView: UITableView) -> Int {
        <#code#>
    }

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        <#code#>
    }

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        <#code#>
    }
}

  转载请注明: waitwalker Swift_Extension

  目录