Swift 扩展的使用

//
//  ExtensionsProtocols.swift
//  SwiftCode
//
//  Created by Alisa on 2022/4/14.
//  Copyright © 2022 Alisa. All rights reserved.
//

import Foundation

/*
    扩展用于对已经存在的数据类型进行新的功能的追加,而协议用于约定属性与方法供遵守它的数据类型实现
 
** 扩展
    在oc中有类别的语法,其功能是为已经存在的类添加新的功能,在swift中可以使用扩展实现相似的功能,与类别不同的是,类别有名称,而扩展是没有名称的
 
    扩展支持的功能,如下:
        <1> 添加计算属性
        <2> 定义实例方法和类方法
        <3> 定义新的构造方法
        <4> 定义下标方法
        <5> 定义嵌套方法
        <6> 使一个已有的类型遵守协议
        <7> 对协议进行扩展、添加新的属性或方法约定
 
    扩展使用关键字extension

    
*/

class Mirror{
    var color:String
    var purpose:String
    var mirrorSize:Float = 0.0
    init() {
        self.color = ""
        self.purpose = ""
    }
    
}
extension Mirror{
    
    //扩展一个计算属性
    var size:Float{
        set{
            self.mirrorSize = newValue
        }
        get{
            return self.mirrorSize
        }
    }
    //扩展一个实例方法
    func showTheBrightLight(){
        print("The mirror show this bright light, 晴朗的天气呢!")
    }
    //扩展一个类方法
    class func cleanMirror(){
        print("清洁一下 this mirror")
    }
    //扩展一个新的构造方法
    convenience init(color:String){
        self.init()
        self.color = color
    }
    //扩展不可以添加普通的属性,只能添加计算属性
    //var size:Float      //Extensions must not contain stored properties
}

protocol BreadTalking{
    
    func showTheBreadName()->Void
}

class BreadFat{
    var color:String
    var name:String
    init() {
        self.color = "yellow"
        self.name = ""
    }
}
extension BreadFat:BreadTalking{
    
    func showTheBreadName() {
        print("This Bread name is: \(self.name)")
    }
}

//给系统的已有类型做扩展,改变自身
extension Int{
    //修改本身需要使用mutating
    mutating func change(){
        self = self * self
    }
}

class Extensions{
    
    //使用扩展添加计算属性、实例方法、类方法、构造方法(便利构造方法)
    func useExtensions(){
        
        let mirror = Mirror(color: "Pink")
        mirror.size = 45.0  //使用扩展的计算属性
        mirror.showTheBrightLight()     //使用扩展的实例方法
        
        //使用扩展的类方法
        Mirror.cleanMirror()
        
        /* 打印信息:
         The mirror show this bright light, 晴朗的天气呢!     使用扩展的实例方法
         清洁一下 this mirror       使用扩展的类方法
        */
    }
    
    //使用扩展给现有类添加协议
    func useExtentionForProtocl(){
        
        let bread = BreadFat()
        bread.name = "Buttered Toast"
        //使用扩展接受的协议实现的方法
        bread.showTheBreadName()
        
        /* 打印信息
         This Bread name is: Buttered Toast
        */
    }
    
    //使用扩展改变实例本身
    func useExtentionForInt(){
        var value = 3
        value.change()
        print("current value is: \(value)")
        
        /* 打印信息
         current value is: 9
        */
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值