返回顶部
首页 > 资讯 > 精选 >Swift中Opaque Types怎么使用
  • 492
分享到

Swift中Opaque Types怎么使用

2023-07-05 23:07:56 492人浏览 薄情痞子
摘要

今天小编给大家分享一下Swift中Opaque Types怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什

今天小编给大家分享一下Swift中Opaque Types怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    什么是Opaque Types

    Opaque Types 是在 Swift5.7 新添加的一个特性。主要是和 Protocol 来搭配使用,用来定义函数中的参数类型。它的作用就是隐藏参数的具体类型,从而使代码变得更加通用,减少冗余代码。废话不多说,下面来看一看它如何使用。

    如何使用

    假设我们有一个定义动物行为的 Protocol Behavior,有两个动物类 Cat 和 Dog 遵守了该协议:

    protocol Behavior {    func run()}struct Cat: Behavior {    func run() {        print("Cat run")    }}struct Dog: Behavior {    func run() {        print("Dog run")    }}

    如果我们想测试一下 run 的功能,可以通过使用 Opaque Types 来定义函数的参数,从而使测试函数可以接受 Cat 和 Dog 的实例对象:

    func testRun(animal: some Behavior) {    animal.run()}let cat = Cat()let dog = Dog()testRun(animal: cat) // Cat runtestRun(animal: dog) // Dog run

    从上述代码可以看到,animal 的类型为 some Behavior。通过 some 关键字声明的类型就是所谓的 Opaque Types,some Behavior 的意思就是任何遵守了 Behavior 的类的实例对象。

    看到这里,可能有的读者就会发现这个不是什么新奇的特性啊,这不就相当于泛型嘛?有这种想法的读者稍安勿躁,下面就来讲一下为什么要使用 Opaque Types。

    为什么要使用

    可读性更强

    首先,下面的三个函数从语法层级上来说都是等价的:

    func testRun(animal: some Behavior) {    animal.run()}func testRun1<A: Behavior>(animal: A) {    animal.run()}func testRun2<A>(animal: A) where A: Behavior {    animal.run()}

    为什么使用的第一个原因就是:使用 some 定义更加清晰,使得代码可读性更高更容易理解。 上面的代码定义比较简单,可能感觉差别不大,大家看看下面的代码应该会有更深的体会????:

    func encodeAnyDictionaryOfPairs(_ dict: [some Hashable & Codable: Pair<some Codable, some Codable>]) -> Datafunc encodeAnyDictionaryOfPairs<_T1: Hashable & Codable, _T2: Codable, _T3: Codable>(_ dict: [_T1: Pair<_T2, _T3>]) -> Data

    性能更好

    还有一个重要的原因就是当 Opaque Types 当做返回值类型时它的限制比 Protocol 类型更加严格,比如下面的代码:

    func testReturn(isCat: Bool) -> some Behavior { // 编译报错    if isCat {        return Cat()    } else {        return Dog()    }}func testReturn1(isCat: Bool) -> Behavior { // 正常编译不会报错    if isCat {        return Cat()    } else {        return Dog()    }}

    当编译器编译 testReturn 函数时,会报以下错误:

    Swift中Opaque Types怎么使用

    而 testReturn1 则不会报错。因为对于 Protocol 当做返回值来讲,不会强制要求所有分支返回同一类型的对象。

    当 Opaque Types 做返回值时,虽然返回值的具体类型不做限制,即任何遵守 Behavior 协议的对象都可以,但所有的分支返回必须为同一类型的对象,即可能返回 Cat,又可能返回 Dog 是不允许的。

    这样做的好处就是代码的性能更好,因为我们从底层限制了返回类型必须是同一类型,所以编译器处理起来会更快。

    任何的事物都有两面性,Opaque Types 也不例外。最后我们来了解一下它的限制。

    使用的限制

    • 不能用于可变参数的声明

    • 不用用于匿名函数的声明

    以上就是“Swift中Opaque Types怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: Swift中Opaque Types怎么使用

    本文链接: https://lsjlt.com/news/355879.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Swift中Opaque Types怎么使用
      今天小编给大家分享一下Swift中Opaque Types怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什...
      99+
      2023-07-05
    • Swift 中 Opaque Types学习指南
      目录什么是Opaque Types如何使用为什么要使用可读性更强性能更好使用的限制总结什么是Opaque Types Opaque Types 是在 Swift5.7 新添加的一个...
      99+
      2023-05-14
      Swift Opaque Types Swift 学习指南
    • Swift中的RegexBuilder怎么正确使用
      本篇内容主要讲解“Swift中的RegexBuilder怎么正确使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Swift中的RegexBuilder怎么正确使用”吧!前言在我们日常的项目开发...
      99+
      2023-07-05
    • Swift字符怎么使用
      这篇文章主要讲解了“Swift字符怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Swift字符怎么使用”吧!导读Swift 是一种支持多编程范式和编译式的开源编程语言Swift 的字...
      99+
      2023-06-03
    • Swift中的类型占位符怎么使用
      本篇内容介绍了“Swift中的类型占位符怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Swift 的类型推断能力从一开始就是语言的核...
      99+
      2023-07-02
    • Swift中反射Mirror怎么用
      小编给大家分享一下Swift中反射Mirror怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言Mirror是Swift中...
      99+
      2024-04-02
    • Swift的Mirror反射怎么使用
      这篇文章主要介绍了Swift的Mirror反射怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Swift的Mirror反射怎么使用文章都会有所收获,下面我们一起来看看吧。元类型与.selfAnyObjec...
      99+
      2023-07-02
    • 在Swift 3.0中使用String.range
      在Swift 3.0中,你可以使用String.range来获取子字符串在原始字符串中的位置。这里是一个简单的示例:```swift...
      99+
      2023-09-27
      Swift
    • Swift Set集合怎么用
      这篇文章将为大家详细讲解有关Swift Set集合怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 创建Set集合// 创建Setvar set: Set<In...
      99+
      2023-06-25
    • swift表格控件怎么用
      这篇文章将为大家详细讲解有关swift表格控件怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下效果图该控件(UITableView) 代码注意的地方:A、ViewController 不单...
      99+
      2023-06-29
    • iOS中多线程的入门使用教程(Swift)
      目录一、iOS的三种多线程技术 二、基本使用NSThread的基本使用NSOperation的基本使用GCD的基本使用总结一、iOS的三种多线程技术 1、NSThread –优点:...
      99+
      2022-05-27
      iOS 多线程
    • Swift中的HTTP请求体Request Bodies如何使用
      本篇内容介绍了“Swift中的HTTP请求体Request Bodies如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!正文...
      99+
      2023-07-05
    • OpenStack中Swift组件的作用是什么
      OpenStack中Swift组件的作用是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一:简介背景Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储...
      99+
      2023-06-14
    • Swift 中怎么进行多重条件排序
      这篇文章主要介绍“Swift 中怎么进行多重条件排序”,在日常操作中,相信很多人在Swift 中怎么进行多重条件排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Swift 中怎么进行多重条件排序”的疑惑有所...
      99+
      2023-06-15
    • Swift语言中怎么自定义操作符
      这篇文章主要介绍了Swift语言中怎么自定义操作符,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在Swift语言中,常见的操作符有+、-、*、/、>、、==、&...
      99+
      2023-06-28
    • Swift中的HTTP请求体RequestBodies使用示例详解
      目录正文通用化body空请求体 EmptyBody数据体 DataBodyJSON体 JSONBody表单 FormBody其他Body Other Bodies正文 在进行HTT...
      99+
      2023-02-03
      Swift HTTP请求体Request Bodies Swift HTTP请求体
    • Swift图表使用Foudation库中测量类型详解
      目录前言定义图表的数据在图表中使用测量值设计一个包装器类型显示格式化标签前言 在这篇文章中,我们将建立一个条形图,比较基督城地区自然散步的持续时间。我们将使用今年推出的新的Swift...
      99+
      2022-11-13
      Swift 图表Foudation库测量类型 Swift Foudation
    • Swift Package使用技巧及混编兼容问题怎么解决
      本篇内容主要讲解“Swift Package使用技巧及混编兼容问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Swift Package使用技巧及混编兼容问题怎么解...
      99+
      2023-07-05
    • Swift怎么给应用添加3D Touch菜单
      要给Swift应用添加3D Touch菜单,可以按照以下步骤进行操作: 在你的应用的 Info.plist 文件中添加一个新的键值...
      99+
      2023-10-22
      Swift
    • 在 Swift 中使用 async let 并发运行后台任务
      文章目录 前言长期运行的任务阻塞了UI使用 async/await 在后台执行任务在后台执行多个任务使用 "async let " 下载多个文件结论 前言 Async/await 语法是在 Swift 5.5 引入的,在 W...
      99+
      2023-08-17
      swift ui 开发语言 原力计划
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作