//
// 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
*/
}
}
Swift 扩展的使用
最新推荐文章于 2024-08-12 19:52:11 发布