推广

Swift进阶(十五)扩展(Extension)

iseeyu2年前 (2024-02-21)推广125

image.png

那我们应该怎样去处理呢?
由于所有的整数都遵守BinaryInteger协议,所有我们可以:
□ 第一种方法,使用泛型,并限定泛型

func isOdd<T: BinaryInteger>(_ i: T) -> Bool {
    (i % 2) != 0
}

□ 给BinaryInteger协议添加扩展,这种方式是比较好的

extension BinaryInteger {
    func isOdd() -> Bool {
        (self % 2) != 0
    }
}

print(3.isOdd())
/*输出结果*/
true
  • 扩展可以给协议提供默认实现,也间接实现可选协议的效果
  • 扩展可以给协议补充协议中从未声明过的方法
protocol MyProtocol {
    func fun1()
}

extension MyProtocol {
    func fun1() {
        print("MyProtocol fun1")
    }
    func fun2() {
        print("MyProtocol fun2")
    }
}

我们都知道,只要遵守了协议,就必须实现协议中声明的方法;但是我们可以在协议的扩展中提供默认实现,这样就可以实现可选协议:

class Person: MyProtocol {}
var p = Person()
p.fun1() // MyProtocol fun1
p.fun2() // MyProtocol fun2

当然,如果我们再类里面去实现协议的方法,那么执行的还就执行类里面的实现:

class Person: MyProtocol {
    func fun1() {
        print("Person fun1")
    }
    func fun2() {
        print("Person fun2")
    }
}
var p = Person()
p.fun1() // Person fun1
p.fun2() // Person fun2

这里有一个 要注意一下:
如下,p声明为遵守MyProtocol协议类型,实际是Person;但是在调用方法的时候,没有在MyProtocol协议中声明但是在扩展中有默认实现的方法,对象p去调用的话,会执行协议扩展中的默认方法。

var p: MyProtocol = Person()
p.fun1() // Person fun1
p.fun2() // MyProtocol fun2

这是因为,fun2在协议中没有声明,那么编译器就不确定遵守它的类是否有实现该方法,所有优先执行协议扩展中实现的默认方法。
如果var p = Person(),这样写,并没有告诉编译器是遵守MyProtocol协议的对象,只是告诉编译器是Person对象,所以优先执行Person里面的方法。

泛型

class Stack<E> {
    var elements = [E]()
    func push(_ element: E) {
        elements.append(element)
    }
    func pop() -> E {
        elements.removeLast()
    }
    func size() -> Int {
        elements.count
    }
}

// 扩展中依然可以使用原类型中的泛型类型
extension Stack {
    func top() -> E {
        elements.last!
    }
}

// 符合条件才扩展
extension Stack : Equatable where E : Equatable {
    static func == (left: Stack, right: Stack) -> Bool {
        left.elements == right.elements
    }
}

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/56644.html

返回列表

上一篇:iOS文件管理

下一篇:iOS KVC和KVO

相关文章

信科网络:什么是营销丛林?如何建立全网营销渠道

信科网络:什么是营销丛林?如何建立全网营销渠道

什么是丛林上一章,我们广州信科网络讲述了营销5.0概念的源起,说明了从营销1.0到营销4.0的演化迭代路径。现在我们再进一步看看,近几年营销环境到底是怎么产生变化的,究竟有什么不一样?我们都知道,近几年来世界各国都逐步走向以互联网为主体的大环境,人们的方式、工作方法、甚至与...

论坛问题总汇:用户名/密码忘记如何获取发帖权限.......。

论坛问题总汇:用户名/密码忘记如何获取发帖权限.......。

论坛用户名忘记? 点击论坛页面右上角【找回密码】,输入邮箱账号,用户名无需填写,邮件中开头部分就会有您的用户名。 论坛密码忘记? 点击论坛页面右上角【找回密码】,输入邮箱账号,用户名可有可无,按照邮件中的步骤,修改密码即可。 论坛注册/找回密码收不到邮件? 如果论坛已经提示邮件...

拼多多评价后的商品怎么退货退款?全方位攻略教你轻松操作!

拼多多评价后的商品怎么退货退款?全方位攻略教你轻松操作!

在拼多多购物的过程中,我们难免会遇到一些不如意的商品,需要退货退款。那么,拼多多评价后的商品怎么退货退款呢?今天,我将为大家详细解析这个话题,让你轻松掌握拼多多退货退款的流程和技巧。 一、拼多多评价后的商品退货退款流程概述 在拼多多购物并评价后,如果你发现购买的商品存在质量问题或者...

京客网:新闻软文营销是企业提升品牌和开拓市场的重要战略 ...

京客网表示在许多企业会通过软文来软文是根据特定产品的概念诉求与问题分析,这是一种针对客户的心理引导的文字形式。本质上,这是公司柔性浸泡的商业战略在广告形式上的实现。一般来说,客户可以通过文字表达和舆论传递来认可某些概念、观点和分析思路,然后达到企业和商品销售的目的。比如:新...

从书签到汽车,图书赠品营销到底该怎么玩。

从书签到汽车,图书赠品营销到底该怎么玩。

对于爱书人和市场来说,要多一些有趣、有意义、能真给读者带来价值感的跨界营销。 <!-- 作者:弹球小姐Lydia 来源:增长官 (zengzhangguan) 本文为作者授权鸟哥笔记发布,转载请联系作者并注明出处 --> 每当我们谈起「图书营销」...

科技行业品牌营销的塑造需要借助新闻推广的特性吸引各种商机。

科技行业品牌营销的塑造需要借助新闻推广的特性吸引各种商机。

新闻宣传在科技企业的品牌建设中起着重要的作用。它不仅是有效的品牌宣传手段,而且对企业品牌形象的建立和维护起着非常重要的作用。现在,推广自己的软文品牌已经成为大多数企业的营销策略。 那么什么是网络呢?小编介绍新闻营销,以新闻的形式发布在网络平台上,通过实时热点话题和用户感兴趣的话题来吸...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片