swift2 扩展
发布时间:2020-12-14 01:59:07 所属栏目:百科 来源:网络整理
导读:扩展就是向一个已有的类、结构体或枚举类型添加新功能。这包括在没有权限获取原始源代码的情况下扩展类型的能力。 Swift 中的扩展可以: 1.添加计算型属性和计算静态属性 2.定义实例方法和类型方法 3.提供新的构造器 4.定义下标 5.定义和使用新的嵌套类型 6.
扩展就是向一个已有的类、结构体或枚举类型添加新功能。这包括在没有权限获取原始源代码的情况下扩展类型的能力。
Swift 中的扩展可以:
计算型属性extension Double { var km: Double { return self * 1_000.0 } var m : Double { return self } var cm: Double { return self / 100.0 } var mm: Double { return self / 1_000.0 } var ft: Double { return self / 3.28084 } } let oneInch = 25.4.mm print("One inch is (oneInch) meters") // 打印输出:"One inch is 0.0254 meters" let threeFeet = 3.ft print("Three feet is (threeFeet) meters") // 打印输出:"Three feet is 0.914399970739201 meters" 构造器
扩展可以向已有类型添加新的构造器。这可以让你扩展其它类型,将你自己的定制类型作为构造器参数,或者提供该类型的原始实现中没有包含的额外初始化选项。
扩展能向类中添加新的便利构造器,但是它们不能向类中添加新的指定构造器或析构函数。指定构造器和析构函数必须总是由原始的类实现来提供。 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() } let defaultRect = Rect() let memberwiseRect = Rect(origin: Point(x: 2.0,y: 2.0),size: Size(width: 5.0,height: 5.0)) 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)) // centerRect的原点是 (2.5,2.5),大小是 (3.0,3.0) 方法extension Int { func repetitions(task: () -> ()) { for _ in 0..<self { task() } } } 3.repetitions({ print("Hello!") }) // Hello! // Hello! // Hello! extension Int { func repetitions(task: () -> ()) { for _ in 0..<self { task() } } } 3.repetitions{ print("Goodbye!") } // Goodbye! // Goodbye! // Goodbye! extension Int { mutating func square() { self = self * self } } var someInt = 3 someInt.square() // someInt 现在值是 9 下标extension Int { subscript(var digitIndex: Int) -> Int { var decimalBase = 1 while digitIndex > 0 { decimalBase *= 10 --digitIndex } return (self / decimalBase) % 10 } } 746381295[0] // returns 5 746381295[1] // returns 9 746381295[2] // returns 2 746381295[8] // returns 7 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |