群组
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#>
}
}