当前位置:   article > 正文

Swift 周报 第二十七期_swift repeat each

swift repeat each

前言

本期是 Swift 编辑组自主整理周报的第十八期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。

欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。

再暗的黑夜也会迎来黎明,再长的坎坷也会连接平川。怀抱Swift社区,一颗永不放弃的希望之心,明天将会是温暖的阳光雨露!

周报精选

新闻和社区:因增速放缓 苹果公司将开启大规模收购

提案:Package Manager 支持自定义宏

Swift 论坛:讨论为什么 didSet 观察者在使用中会触发 Set 类型的属性

推荐博文:在 SwiftUI 中掌握 Canvas 的使用

话题讨论:

你存钱了吗?你存钱的目的是什么呢?

新闻和社区

苹果公司向“恢复基金”再投2亿美元,推进碳移除项目

据界面新闻消息,苹果公司 4 月 12 日宣布,在最初 2 亿美元的投资基础上,将向 2021 年设立的“恢复基金”(Restore Fund)再投多达 2 亿美元。该基金旨在为高质量的自然碳移除项目提供资金,激励全球投资保护和恢复“关键生态系统”。苹果公司还希望帮助无法通过现有技术避免或减少碳排放的企业,推广可行的碳移除解决方案。

加码后的基金将由汇丰资产管理部门和 Polliation 合资成立的 Climate Asset Management 管理,额外投资预计将使苹果此前提出的每年从大气中清除 100 万公吨二氧化碳目标翻倍,同时为投资者带来经济回报。

该基金期望把重点放在面向自然的农业项目以及保护和恢复关键生态系统的项目上,前者将帮助公司从可持续管理的农业实践中获得收入,后者则能从大气中移除并储存二氧化碳。苹果公司表示,“恢复基金”的投资将遵循“严格的社会和环境标准”。

因增速放缓 苹果公司将开启大规模收购

【环球网科技综合报道】4 月 7 日消息,据外媒报道称,苹果公司目前拥有超过 1650 亿美元的现金储备,鉴于苹果公司当前增速放缓,这家公司未来会开启大规模的收购。

不过,和微软、亚马逊等大手笔收购类型不同,苹果公司更倾向于收购小型初创公司。

外媒称,苹果喜欢以培养、孵化的方式开展收购,并耐心等待这些初创公司成长,来撬动新的市场。

据此前报道,今年 2 月,苹果收购了位于加州的 AI 算法公司 WaveOne 。今年 3 月,苹果公司已经收购了英国开放银行初创公司 CreditKudos 。

据了解,苹果经常收购小型企业,以加强其技术和专业知识,但显然没有或立即将其推广到产品或服务中。另一方面,许多收购确实成为苹果生态系统的关键部分。近年来,苹果已经收购了音乐识别服务 Shazam 和自动驾驶汽车公司 Drive.ai 等企业。

Swift Student Challenge 现已开放申请

我们很高兴能一如既往地为世界各地热爱编程的学生提供长期支持。欢迎使用 Swift Playgrounds 或 Xcode 编写 App Playground (主题自选) 并提交你的杰作,向我们展现你对于编程的热爱。优胜者将获得奖项和表彰,以及额外奖励。

提案

通过的提案

SE-0393 Value 和 Type 参数包 提案通过审查。该提案已在 二十六期周报 正在审查的提案模块做了详细介绍。

正在审查的提案

SE-0394 Package Manager 支持自定义宏 提案正在审查。

宏提供了一种扩展 Swift 的方法,通过对输入源代码执行任意语法转换来生成新代码。该提案涵盖了如何将自定义宏作为 Swift 软件包的一部分进行定义、构建和分发。

SE-0395 Observation 提案正在审查。

该提案定义了什么是可观察的引用,观察者需要遵守什么,以及类型与其观察者之间的联系。这种设计模式是许多语言都支持的,Swift 引入之后,无疑将更加强大、安全和高性能。

Swift论坛

  1. 提议可变泛型类型抽象包

介绍

之前的 SE-0393 引入了类型参数包和几个相关概念,允许泛型函数声明抽象出可变数量的类型。 该提案将这些想法概括为泛型类型声明。

动机

当试图在集合上概括通用算法时,自然会出现对可变数量的类型进行抽象的通用类型声明。 例如,惰性 ZipSequence 可能在两个序列上是通用的。 可以声明一个 ZipSequence 类型,它将固定序列列表的元素表示为元组序列:

struct ZipSequence<each S: Sequence>: Sequence {
  typealias Element = (repeat each S.Element)

  let seq: (repeat each S)

  func makeIterator() -> Iterator {
    return Iterator(iter: (repeat (each seq).makeIterator()))
  }

  struct Iterator: IteratorProtocol {
    typealias Element = (repeat each S.Element)

    var iter: (repeat each S.Iterator)

    mutating func next() -> Element? {
      return ...
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

建议的解决方案

在泛型类型的泛型参数列表中,each 关键字声明了一个泛型参数包,就像它在泛型函数的泛型参数列表中所做的那样。 存储属性的类型可以包含包扩展类型,如上面的 let seq 和 var iter。

  1. 讨论点前缀被认为是丑陋的

虽然我们已经习惯了,但在静态成员和枚举常量前加上点会引入视觉噪音,看起来太聪明了,总是让我的其他语言背景的同事感到惊讶:

func foo(_ v: Color) {...}
object.foo(.red) // 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/223668
推荐阅读
相关标签