12

iOS 摸鱼周报 #60 | 2022 Apple 高校优惠活动开启

 2 years ago
source link: https://zhangferry.com/2022/07/14/iOSWeeklyLearning_60/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
moyu_weekly_cover.jpeg
  • 本期话题:2022 Apple 高校优惠活动开启
  • 本周学习:Swift 5.7 中的 opaque parameter 和 primary associated types
  • 内容推荐: WWDC22 内参推荐
  • 摸一下鱼:推荐收集到的各种图标网站
  • 岗位推荐:上海 Espressif 招聘全栈工程师

Apple 资讯

2022 Apple 高校优惠活动开启

@远恒之义:炎热的暑假来袭,Apple 为你“降降温”。一年一度的 Apple 高校优惠活动正式开启,为你的高校生活购买 Mac 或 iPad,不仅省钱,还送 AirPods,更有 Apple Pencil 和智能键盘优惠、八折加购 AppleCare+ 服务计划及更多惊喜等着你。此次优惠活动面向在读及新录取的高校学生,以及各级教师和教职员工,选购前需要通过 UNiDAYS 资格验证。活动限制查看 2022 中国大陆高校优惠活动的条款和条件

整理编辑:Hello World

Swift 5.7 中的 opaque parameter 和 primary associated types

熟悉 Swift 的读者都知道,如果你将存在关联类型或者 Self 的协议当做类型使用,编译器会报错 Protocol 'X' can only be used as a generic constraint because it has Self or associated type requirements.。表示该协议只能用作泛型协议。

Swift 5.1 为了解决这个问题引入了不透明返回类型的概念,即在函数返回值的位置使用 some 修饰协议,整体作为一个类型使用。这也是支持 SwiftUI 的核心特性之一。现在 Swift 5.7 扩展了这一功能。

opaque parameter

现在 some 关键字不仅可以用在函数返回值位置,也支持用来修饰函数参数。表示的含义和修饰返回值类型时是一致的。示例如下:

class BookRender {
    ...
    func bookArticles(_ articles: [Article]) {
        ...
    }
}

BookRender 是一个渲染文章的对象,bookArticles 接收一个文章数组来渲染。上文代码中入参仅支持数组类型,如果我们想同时支持 Array Set类型,Swift 5.7 之前我们一般使用泛型来处理:

func bookArticlesGeneric<T: Collection>(_ articles: T) where T.Element == Article {}

通过泛型来约束入参为集合类型,这样写是没有问题的,但更简洁的编写方式在 Swift 5.7 中出现了,我们可以使用 some 修饰参数入参从而实现将 Collection协议用做类型约束的目的。如下:

func bookArticlesOpaque(_ articles: some Collection) {}

这样编写的代码同样支持入参为集合类型 ArraySet。Swift 5.7 允许我们使用 some 修饰存在关联类型或者 Self的协议直接当做参数类型使用,而不仅限于不透明返回类型。这一特性可称为不透明参数。更详细可以参考 SE-0341

对比以上泛型和 some 两种实现方式可以发现,不透明参数写法暂时还不能完全等价于泛型的方式。原因在于泛型函数不仅限制了入参类型为 Collection 集合类型,同时限制了元素 Element 类型为 Article 。而 some仅仅是限制了 Collection集合类型,对于元素类型却没有限制。这其实是不完整的功能替换,所以 Swift 5.7 中又新增了另一项特性来解决该问题。就是接下来的 primary associated types

primary associated types

SE-0346 中引入了更简洁的语法来实现特定场景下指明协议关联类型的需求。该特性是对泛型协议能力的扩展。继续上文的示例,如果我们仍然想用 some替代泛型,同时保留指明 Collection 元素类型的需求。那么我们不得不在 Collection 协议本身上下功夫。

func bookArticlesOpaque(_ articles: some Collection) where Collection.Element == Article {} // Error

我们没有办法使用类似上面代码中的 where来约束关联类型,因为这里的 Collection 代表的仍然是协议而非是具体类型。所以我们的实际需求转为了 “需要在使用协议时,有一种途径可以指明约束的关联类型”。这就是 primary associated types

Swift 5.7 中 Collection 的定义由 public protocol Collection : Sequence {} 变为了 public protocol Collection<Element> : Sequence {},注意对比,这里多出的 <Element>实际就是所谓的 primary associated types。它即像协议又类似泛型的语法。

之所以叫做 primary,是因为并不是所有的关联类型都应该在这里声明。相反。应该只列出最关心的那些关联类型,剩余的关联类型仍然由编译器推断决定。

在使用该协议时,可以直接通过类似泛型的语法来指明该关联类型的具体类型。例如我们上面的例子:

func bookArticlesOpaque(_ articles: some Collection<Article>) {}

此时通过 some 实现的 bookArticlesOpaque 才和泛型的函数 bookArticlesGeneric完全等价。

Swift 标准库的部分协议已经改写为 primary associated types,同样这一特性也支持我们自定义的协议,语法是相同的。

另外相关联的特性还包括泛型和 someany之间的实现异同。以及如何取舍的问题。

对于国内的 iOSer 来说,WWDC 内参是一个较好的了解 WWDC 新内容途径,目前超过三成的文章已经出炉,今年的内参质量更上一层楼。今年我们部分摸鱼编辑参与其中,你可以查看WWDC22内参参与体验,今天还有机会获得邀请码呦。

1、使用 LLDB 调试 Swift -- 来自:WWDC22内参

@夏天:使用 LLDB 调试 Swift 代码时,有时候有点力不从心,有时候找不到源码,有时候指令失效等。文章介绍了几个解决方案来解决命令失效的问题。文章最后还介绍了如何正确的为打包 Framework 设置参数,确保 LLDB 能够正常运行。

2、Safari 和 WebKit 新特性介绍 -- 来自:WWDC22内参

@夏天:苹果关于 Safari 和 WebKit 的更新,可能是其为了追平某些功能在各个浏览器上相同或相似的体验。文章介绍了一些前端的概念,以及几个有助于前端开发的网站 Can I useMDN

3、在 SwiftUI 中组合各种自定义布局 -- 来自:WWDC22内参

@夏天:Grid 是一个十分强大的网格排版工具,极大地改善了 SwiftUI 的版式控制能力。除了 Grid, 文章还介绍了 ViewThatFits 以及使用 AnyLayout 在不同的布局类型之间平滑地过渡。

4、快速链接:优化构建和启动耗时 -- 来自:WWDC22内参

@夏天:一篇关于实现更快构建和优化 APP 提交和缩短启动耗时的文章。文章介绍了静态链接和动态链接相关的概念,并引申其原理内容。构建和启动相关的知识,一直是 iOS 开发中较为深奥的一部分,文章介绍的内容无论你是学习还是准备面试,都有一定的作用。

5、Swift 新特性介绍 -- 来自:WWDC22内参

@夏天:是一篇让你快速了解今 Swift 更新内容的文章,为你提供了最近几年 Swift 发展的概览,介绍了今年更新的内容。如果你需要对今年 Swift 更新内容有一个了解,不失为一种途径。

7、探索 In-App Purchase 集成和迁移 -- 来自:WWDC22内参

@夏天:IAP 可能是部分国内开发者上架 App Store 的一种阻碍。去年 Apple 对 IAP 大拆大建,今年也新增了部分功能。如果你近期有关于 IAP 相关的内容,可以回顾最近两年的内参,对你有不小的帮助。

6、Swift 编程语言--来自:cnswift

@Hello World:比 SwiftGG 更快 的 Swift 中文版本。

整理编辑:CoderStar

20220714233011.png
  • iconpark:字节出品的一款图标网站;
  • iconfont:估计这个大家都知道,就不介绍了;
  • icons8:Icons8 推出的动态图标网站;
  • openmoji:面向设计师、开发人员和其他人的开源表情符号!

自己做Side Project的时候用的上哦!

公司名:Espressif(乐鑫科技)

城市:上海

Job Description & Summary:

A career within ESPRESSIF Digital Solutions team, will provide you with the opportunity to digitally transform the company by building elegant web/mobile systems backed by latest technologies. As a member of our team, the candidate will join talented professionals with diverse backgrounds and skills.

Skills Required

· Bachelor's degree in Computer Science, Information Technology or related area · 2-6 years of hands-on experience developing full-stack software applications · Experienced with relational databases (MySQL, MSSQL) with the ability of database design and optimization · Strong expertise in Java/Scala/Python programming language with Spring/Play/Django framework experience · Deep understanding of front-end technologies such as JavaScript, CSS, HTML5, React or Vue etc.

Skills Desired

· Understanding of CI/CD pipeline and related tools such as Git, Jenkins, Docker, Kubernetes · Experienced with any NoSQL databases e.g. MongoDB and distributed cache e.g. Redis · Experience with ELK (ElasticSearch, LogStash, Kibana) stack · Experience with Azure or AWS cloud · Fluent oral English communication

联系方式:简历发送到邮箱:[email protected] 或加微信:fzhanfei(备注:摸鱼周报)。

iOS 摸鱼周报,主要分享开发过程中遇到的经验教训、优质的博客、高质量的学习资料、实用的开发工具等。周报仓库在这里:https://github.com/zhangferry/iOSWeeklyLearning ,如果你有好的的内容推荐可以通过 issue 的方式进行提交。另外也可以申请成为我们的常驻编辑,一起维护这份周报。另可关注公众号:iOS成长之路,后台点击进群交流,联系我们,获取更多内容。

iOS 摸鱼周报 #59 | DevOps 再理解

iOS 摸鱼周报 #58 | 极客风听歌网站,纯文字音乐播放器

iOS 摸鱼周报 #57 | 周报改版,WWDC22 讲座集锦

iOS 摸鱼周报 #56 | WWDC 进行时

WechatIMG384.jpeg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK