Extension 扩展

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值