本文是记录一下对swift extension的使用
首先extension即扩展类
用于扩展类功能,以适应不同人使用该类的时候不同需求
作为一个扩展,不能为类增加正常属性,但是可以增加计算属性(通过类其他属性计算出来的值) 。
扩展也可以为类增加功能函数
extension people{
func eat(food:Int) {
self.weight += food
} }
注意:当然当你为结构体要增加扩展函数的时候,而且这个函数需要改变某些结构体自带属性(重新赋值),需要在方法名字面前加上mutating,说明这个函数是用于赋值作用的。 因为结构体是值类型的,赋值他需要创建一个新的副本,而它不知道这个新的副本放在那里,加上mutating后他就会把这个副本覆盖到要set的地方
extension people{
mutating func eat(food:Int) {
self.weight += food
}
}
一般扩展是使用在扩展系统类功能,封装函数,使我们快速达到需求
下面我扩展Int类的功能
让他帮我实现以下功能
- 使用.toString获得整数的字符串类型
- 使用.toBinaryString获得整数的二进制字符串类型
- 使用.toCube获得整数的三次方
- 使用下标获得整数的某个位的数 1234[1] ->2
import UIKit
//在OC中叫做分类
//扩展系统类函数 让其使用更加方便
extension Int{
//获得该整数的字符串
var toString : String{
return String(self)
}
//三次方计算属性
var toCube : Int{
return self*self*self
}
//转换成二进制String
var toBinaryString : String{
get{ var res = String()
var a = self
repeat{
res = String(a%2) + res
a = a/2
}while(a != 0)
return res
}
}
//通过下标获得某个位的数
subscript( index : Int) -> Int? {
// assert(index>String(self).count&&index<0, "This is a invalid subscript")
let a = String(self)
if let res = Int(a[a.index(a.startIndex, offsetBy: index)].toString)
{
return res
}
return nil
}
}
//扩展Character
extension Character{
var toString : String{
return String(self)
}
}
var a = 100
a[1]
a.toString
a.toCube
a.toBinaryString
结果
|
请发表评论