iOS Swift No.21 - 协议5

第二十一章 协议。

14. Optional Protocol Requirements (可选协议要求)

我们可以为协议定义一个可选的要求(optional requirement),这些要求可以勿需被所遵循的协议类型所实现,我们可以在协议的定义中以添加optional修饰符作为前缀的方法作为这个协议的可选要求。当我们写的代码要与objective-c作交互的时候,要加上@objc属性,需要注意的是@objc协议只能被继承于Objective-c的类所采用或@objc的类。而@objc协议不能内结构体或枚举所采用。

当我们在可选要求中使用方法或属性的时候,它的类型会自动变成可选,举个例子,类型的方法由(Int) -> String变成((Int) -> String)?,需要注意的是整个函数类型将会包装在可选类型里面,而不是返回类型变成可可选的。在可选链里面可以调用这个可选协议要求,因为遵循协议的类型可能没有实现这些可选要求。类似someOptionalMethod?(someArgument) 这样,你可以在可选方法名称后加上 ? 来调用可选方法,详情见可选链章节。

@objc protocol CounterDataSource {
   
	// 可选方法要求
    @objc optional func increment(forCount count: Int) -> Int
    // 可选属性要求
    @objc optional var fixedIncrement: Int {
    get }
}

上面的这个例子是定义了一个整数计数的类Counter它使用外部的数据源来提供每次的增量。数据源由CounterDataSource协议定义,包含两个可选要求

这个CounterDataSource协议定义了一个可选方法要求increment(forCount:)和一个可选属性要求fixedIncrement,这两个要求定义了两个不同的方法来为数据源提供一个Counter实例的合适的增量方法,
在这里插入图片描述

下例定义的是一个Counter类,它有两个类型为CounterDataSource?的属性dataSource。

class Counter {
   
    var count = 0
    var dataSource: CounterDataSource?
    func increment() {
   
        if let amount = dataSource?.increment?(forCount: count) {
   
            count += amount
        } else if 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值