import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//扩展用于6个方面,添加计算属性,添加静态计算属性,定义实例方法,定义类型方法,提供新的构造器,定义附属脚本,定义和使用新的嵌套类型,使一个已有类型符合某个协议。理论上扩展可以写在任何的代码块存放处,但是建议最好可以写在单独的文件中,便于管理
//添加属性和方法
addPropertyAndMethod()
//添加构造器
addInitializeMethod()
}
func addPropertyAndMethod() {
var money:Double = 100_000_000_000_000
debugPrint("津巴布韦货币兑换成人民币:\(money.CNY)")
debugPrint(Double.whoAmI())
}
func addInitializeMethod() {
var somebody = NightWatcher()
somebody.say()
var tarly = NightWatcher(name: "Tarly")
tarly.say()
}
}
extension Double {
//扩展增加了类型属性
static var name = "扩展Double"
static var factor:Double {
return 12_500_000_000_000
}
//增加了计算方法
var CNY:Double {
return self / Double.factor
}
//扩展增加了类型方法
static func whoAmI()->String {
return "我是\(name)我的类型为\(self)"
}
}
struct Sword {
var length = 0.5
var materials:String = "由普通钢铸而成"
}
class NightWatcher {
var sword: Sword
var name: String
init(name: String, sword:Sword) {
self.name = name
self.sword = sword
}
//扩展类类型,只能增加便捷构造器,而不能增加指定构造器和析构器
convenience init() {
self.init(name: "守夜人", sword:Sword())
}
}
extension Sword {
init(brand:String) {
if brand == "异鬼克星" {
self.init(length: 1, materials: "由龙晶铸造而成")
} else {
self.init()
}
}
var description:String {
return "长\(length)米\(materials)"
}
}
extension NightWatcher {
//扩展类类型,只能增加便捷构造器,而不能增加指定构造器和析构器,这里如果吧convenience去掉就会报错
convenience init(name:String) {
if name == "Tarly" {
self.init(name:name, sword:Sword(brand: "异鬼克星"))
} else {
self.init()
}
}
func say() {
debugPrint("我是\(name) 我的剑\(sword.description)")
}
}