Swift 协议和扩展

  • 协议(protocol

协议规定了用来实现某一特定功能所必需的方法和属性。
任意能够满足协议要求的类型被称为遵循(conform)这个协议。
类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能。

协议可以照Java中的接口来理解

  1. 属性定义要求

1、不能用默认值
2、必须指明类型: { set get } 来表示属性是可读可写的,可读属性则用 { get }
3、必须用var修饰

  1. 方法定义要求

1、方法不能有方法体
2、方法不可以有默认值

  • 声明一个协议
protocol Identifiable {
    var Id: String{get set}
    func DisplayID()
}
  1. 实现协议中的属性

1、属性可以设置默认值
2、协议中属性为可读可写,必须声明为var
3、协议中属性为可读的,实现中可以声明let或者var

  • 遵循协议
struct User: Identifiable{
    var Id: String
    
    func DisplayID(){
        print("The Id is \(Id)")
    }
}
var user = User(Id: "2116110250")
user.DisplayID()
  • 案例:代理模式
protocol ChongLang{
    func Function()
}
class UWIFI:ChongLang{
    func Function() {
        print("我用Wi-Fi上网冲浪。")
    }
}
class UKuanDai: ChongLang {
    func Function() {
        print("路由器坏了,只能连接宽带上网冲浪。")
    }
}
class ZhaiNan{
    var shangwang:ChongLang
    init(shangwang:ChongLang){
        self.shangwang = shangwang
    }
    func Happy(){
        shangwang.Function()
        print("终于可以上网了,我要看一切东西,美滋滋。")
    }
}

var zhainan = ZhaiNan(shangwang: UWIFI())
zhainan.Happy()
  • 扩展

扩展允许将方法添加到现有类型中,以使它们执行原本没有设计要执行的操作。
关键字:extension

extension Array {
   func GetMax(array:Array<Int>) -> Int{
       var maxValue = array[0]
       for index in 1..<array.count{
           if maxValue < array[index] {
               maxValue = array[index]
           }
       }
       return maxValue
   }
}
var testArray = [23,4,67,1,0,-3,192,34]

print(testArray.GetMax(array: testArray))
  • 扩展协议

关键字:extension

extension Collection {
    func summarize() {
        print("There are \(count) of us:")
        for name in self {
            print(name , terminator:" ")
        }
    }
}
testArray.summarize()
  • 面向协议编程
protocol myIdentifiable {
    var Id: String{get set}
}
extension myIdentifiable {
    func Identify(){
        print("My Id is \(Id)")
    }
}
class Doctor: myIdentifiable {
    var Id: String
    init(Id: String){
        self.Id = Id
    }
}
var doctor = Doctor(Id:"aa123")
doctor.Identify()
  • 总结
  1. 协议描述了采用的类型必须具有的方法和属性,但未提供这些方法的实现。
  2. 您可以在其他协议的基础之上构建协议,类似于类。
  3. 扩展使您可以向特定类型(例如Int)添加方法和计算属性。
  4. 协议扩展使您可以向协议添加方法和计算属性。
  5. 面向协议编程是一种将应用程序体系结构设计为一系列协议,然后使用协议扩展来提供默认方法实现的实践。

本博文中的案例来自【100 Days of SwiftUI——协议和扩展】

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值