前言

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

欢迎投稿或引荐内容。现在计划每两周周一发布,欢迎情投意合的朋友一同参加周报整理。

求人不如求己,你多相同本领,就少一点啊乞求;Swift社区让你多相同技能,少一些嘲讽!

周报精选

新闻和社区:码出新宇宙,WWDC23 就在眼前

提案:有 4 个提案经过,本期没有产生新的提案

Swift 论坛:PermutableCollection 协议

引荐博文:SwiftUI 中 LinearGradient的用法

论题评论:

有博主在视频交际渠道说,2023年已然迎来了经济危机,仅仅有些人不愿意信任而已,那么你以为国内2023年是否真的进入了经济危机?

上期论题成果

Swift 周报 第三十期

上期论题评论成果表明,交际隔阂个人挑选标准的提高是导致男女集体互不干涉的主要原因,而社会观念的改变也起到了必定的影响。这些因素一起作用导致了男集体和女集体彼此独登时寻找伴侣的现象。

新闻和社区

App、App 内购买项目和订阅即将实行税率调整

App Store 的交易和付出机制旨在协助你在掩盖全球的 175 个国家和地区的商铺中,以 44 种货币为你的产品和服务快捷地进行定价与出售。Apple 会为开发者管理其间 70 多个国家和地区的税收,而且你还能够为 App 和 App 内购买项目分配税务类别。咱们会依据税务法规的改变,定期更新你在某些地区的收益。

从 5 月 31 日起,你从 App 和 App 内购买项目 (包含主动续期订阅) 出售中取得的收益将进行调整,以反映以下税率调整。请注意,相关内容的价格将保持不变。

加纳:增值税率从 12.5% 上调至 15%。 立陶宛:关于契合条件的电子书和有声书,增值税率从 21% 下调至 9%。 摩尔多瓦:关于契合条件的电子书和期刊,增值税率从 20% 下调至 0%。 西班牙:收取 3% 的数字服务税。 因为巴西税务法规的改变,在巴西开展的一切 App Store 出售现由 Apple 代扣税款。咱们会按月代扣代缴应向相应税务机关交纳的税款。自 2023 年 6 月开端,你能够在 5 月份的收入中查看从你的收益中扣除的税款金额。巴西境内的开发者不会遭到这一改变的影响。

以上调整收效后,App Store Connect 中“我的 App”的“价格与出售规模”部分会随即更新。一如既往,你能够随时更改你的 App 和 App 内购买项目的价格 (包含主动续期订阅)。现在,你能够从 900 个价格点中挑选,为任何店面更改定价。

码出新宇宙

Swift 周报 第三十期

WWDC23 就在眼前。太平洋夏令时刻 6 月 5 日上午 10 点,Apple 主题讲演将在 apple.com 和 Apple Developer App 线上供给,为本次大会拉开序幕。你还能够经过同播同享,约请朋友一同观看。

现在,契合条件的开发者能够开端报名参加活动了。相关活动包含 Q&A、“会晤讲演者”以及社区暖场活动等线上聊天室活动,旨在促进你与开发者社区和 Apple 专家的沟通和交流。

Apple 公证服务更新

正如去年在 WWDC (简体中文字幕) 上宣告的那样,假如你现在运用 altool 命令行东西或许 Xcode 13 或更早版别经过 Apple 公证服务对 Mac 软件进行公证,则需求改为运用 notarytool 命令行东西,或许晋级到 Xcode 14 或更高版别。自 2023 年 11 月 1 日起,Apple 公证服务将不再承受从 altool 或许 Xcode 13 或更早版别上传的内容。已经过公证的现有软件能够继续正常作业。

Apple 公证服务是一个主动化体系,它会扫描 Mac 软件中有没有歹意内容,查看有没有代码签名问题,并快速返回成果。对软件进行公证可向用户保证,Apple 已查看且未发现软件中包含歹意软件。

为改善 Apple 渠道的安全性和隐私保护,用于验证 App 和关联 App 内购买项目出售的 App Store 收据签名前言证书将更新为运用 SHA-256 加密算法。此更新将分多个阶段完结,新的 App 和 App 更新可能会受影响,具体取决于它们验证收据的方式。

Apple 规划大奖入围名单公布

Swift 周报 第三十期

Apple 规划大奖旨在赞誉在多元包容、乐趣横生、超卓互动、社会影响、视觉图画,以及创新思想等类别中表现超卓的 App 和游戏。马上一睹本年的入围著作,咱们将在太平洋夏令时刻 6 月 5 日下午 6:30 揭晓获奖者,敬请重视。

提案

经过的提案

SE-0399 value 包展开的元组 提案经过检查。该提案已在 二十九期周报 正在检查的提案模块做了具体介绍。

SE-0397 独立声明 Macros 提案经过检查。该提案已在 二十八期周报 正在检查的提案模块做了具体介绍。

SE-0392 自界说 Actor 执行器 提案经过检查。该提案已在 二十五期周报 正在检查的提案模块做了具体介绍。

SE-0390 **引入 @noncopyable ** 提案经过检查。该提案已在 二十四期周报 正在检查的提案模块做了具体介绍。

Swift论坛

  1. 评论从 Realm 数据库搬迁提示?

发问

现在正在寻求搬迁到更轻量级的处理方案(realm 现在对我的用例来说过分分了)而且想搬迁到 grdb,但不必将 realm 作为依靠项持续一年或更长时刻……

回答

在没有 Realm 库的情况下,您是否能够读取 Realm 数据库文件的内容? 不然,您必须将 Realm 作为依靠项保留,直到您的用户搬迁完毕。

您能够经过发布能够要求用户晋级的应用程序版别来缩短时刻跨度。 这将答应您运用 “Realm-only”、“Realm-to-GRDB” 和最终的 “GRDB-only” 版别进行过渡。

  1. 提议答应 protocol 嵌套在非通用上下文中

介绍

答应协议嵌套在非通用 struct/class/enum/actors 和函数中。

动机

将标称类型嵌套在其他标称类型中答应开发人员表达内部类型的天然规模——例如,String.UTF8View 是嵌套在 struct String 中的 struct UTF8View,它的称号清楚地传达了它作为 UTF-8 代码接口的用途 – 字符串值的单位。

可是,嵌套现在仅限于在其他 struct/class/enum/actors 中的 struct/class/enum/actors; 协议底子不能嵌套,因而必须始终是模块中的顶级类型。 这很不幸,咱们应该放宽此限制,以便开发人员能够表达天然作用于某些外部类型的协议。

建议的处理方案

咱们将答应在非泛型 struct/class/enum/actors 中以及在不属于泛型上下文的函数中嵌套协议。

例如,TableView.Delegate 天然是与表视图相关的托付协议。 开发人员应该这样声明它——嵌套在他们的 TableView 类中:

class TableView {
  protocol Delegate: AnyObject {
    func tableView(_: TableView, didSelectRowAtIndex: Int)
  }
}
class DelegateConformer: TableView.Delegate {
  func tableView(_: TableView, didSelectRowAtIndex: Int) {
    // ...
  }
}

现在,开发人员选用复合称号(例如 TableViewDelegate)来表达能够经过嵌套表达的相同天然规模。

作为一个额定的好处,在 TableView 的上下文中,能够运用更短的称号来引证嵌套协议托付(与一切其他嵌套类型相同):

class TableView {
  weak var delegate: Delegate?
  protocol Delegate { /* ... */ }
}

协议也能够嵌套在非泛型函数和闭包中。 不可否认,这在某种程度上是有限的实用性,因为对此类协议的一切一致性也必须在同一功用内。 可是,也没有理由人为地限制开发人员在函数中创立的模型的复杂性。 一些代码库(值得注意的是,Swift 编译器自身)运用带有嵌套类型的大型闭包,而且它们受益于运用协议的笼统。

func doSomething() {
   protocol Abstraction {
     associatedtype ResultType
     func requirement() -> ResultType
   }
   struct SomeConformance: Abstraction {
     func requirement() -> Int { ... }
   }
   struct AnotherConformance: Abstraction {
     func requirement() -> String { ... }
   }
   func impl<T: Abstraction>(_ input: T) -> T.ResultType {
     // ...
   }
   let _: Int = impl(SomeConformance())
   let _: String = impl(AnotherConformance())
}
  1. 提议PermutableCollection 协议

简介

该提案旨在增加一个 PermutableCollection 协议,该协议将坐落调集协议层次结构中的 Collection 和 MutableCollection 之间。

动机

在某些情况下,人们期望能够移动和排序元素,一起不答应(或限制)元素的骤变。 鉴于大量不太重要的搜集协议,这是一个值得注意的遗漏。 创立自界说调集类型时,PermutableCollection 协议在任何强制元素唯一性和/或身份的有序调集中都是首选。 用例将包含即将推出的 OrderedDictionary 和 OrderedSet。 关于不可变和可变调集,它还能够供给对 Swift 运用的底层(而且可能是高度优化的)排序算法的一致访问。

规划

协议规划简单,只需一个 swapAt 要求

/// A collection that supports sorting.
protocol PermutableCollection<Element> : Collection where Self.SubSequence : PermutableCollection {
  mutable func swapAt(_ i: Index, _ j: Index)
}

经过 swapAt 函数,经过扩展增加额定的排序函数完成。

extension PermutableCollection {
  mutating func move(fromOffsets source: IndexSet, toOffset destination: Int) {
    // move algorithm enacts changes via swapAt()
  }
  mutating func partition(by belongsInSecondPartition: (Element) throws -> Bool) rethrows -> Index {
    // partition algorithm enacts changes via swapAt()
  }
  mutating func sort() where Self: RandomAccessCollection, Self.Element: Comparable {
    // partition algorithm enacts changes via swapAt()
  }
  // ... more permutation operations that mimic those available for MutableCollection
}
  1. 评论 Vapor 和 query 缓存?

  2. 评论在 Swift 体系中,怎么将文件内容读取为字符串?

发问

我有一个文件的 FileDescriptor:

let fd = try FileDescriptor.open(<#filepath#>, .readOnly) 我能够运用 fd.read(into:) 将文件内容加载到 UnsafeMutableRawBufferPointer,但这是将文件内容加载到字符串中的正确第一步吗? 假如是这样,

在将它传递给 fd.read(into:) 之前,

  1. 我需求运用 .allocate(byteCount:alignment:) 分配 UnsafeMutableRawBufferPointer。 正确的 byteCount 取决于文件的巨细。那么怎么运用 Swift System 获取文件的巨细呢?
  2. 怎么从 UnsafeMutableRawBufferPointer 获取字符串?

回答

能够参阅这个Git库:github.com/tayloraswif…

  1. 评论为什么我不能运用 @dynamicMemberLookup 转发 enum cases?

  2. 评论如安在 swift-foundation 中正确地进行性能测试?

发问

我想比照一下swift-foundation 和 Xcode 自带的 JSONDecoder 解码的速度。

我在一个新项目中运用单元测试和 measureBlock 以及在 swift-foundation 中运用 JSONEncoderTests 对其进行了测试。

swift-foundation 中的 JSONDecoder 看起来太慢了,我以为这是因为 swift-foundation 还没有作为一个库被引入。

引荐博文

iOS crash 陈述剖析系列 – 看懂 crash 陈述的内容

摘要: 本篇文章主要介绍了iOS溃散陈述的解读方法,从陈述的 Header、Exception information、Diagnostic messages、Backtraces、Thread state 和 Binary images 六个部分具体讲解了各字段意义,并供给示例代码协助读者更好地了解。一起也引导读者去深入学习符号化的相关知识来取得更多信息。经过阅览本文,开发者可轻松看懂代码中产生的溃散陈述,并进行问题定位和处理。

SwiftUI 中 LinearGradient的用法

摘要: 这篇博文探讨了在 SwiftUI 中运用 LinearGradient 为目标创立渐变色彩效果。它展现了怎么界说色彩数组、运用标准和自界说起点和结尾,以及设置坐标以改善铅笔目标上的色彩笔尖。本文还包含用于创立具有各种起点结尾组合的不同线性渐变的示例代码。文章以示例完毕,展现了怎么运用这些技能来自界说一支蓝色铅笔或整套铅笔的外观。

Swift 中的动态成员查找

摘要: 本文介绍了 Swift 语言中的动态成员查找(Dynamic Member Lookup)特性。经过在类型上运用 @dynamicMemberLookup 特点,咱们能够重载该类型的 subscript 方法来更方便地访问其数据。可是,这也意味着缺少编译时安全性。为了处理这个问题,本文提到了运用 KeyPath 作为参数的 subscript 方法来完成编译时安全查看。最后,作者建议咱们能够谨慎地运用 @dynamicMemberLookup 特性来改善 API 规划。

论题评论

有博主在视频交际渠道说,2023年已然迎来了经济危机,仅仅有些人不愿意信任而已,那么你以为国内2023年是否真的进入了经济危机?

1.是的。确实已经经济危机了,本年作业很难找,搭档比曾经更卷啦,各种裁员音讯不断。

2.经济危机不可能。五一淄博接待游客超过了100万人次,人挤人的旅行现象仍然常在。

3.经济危机应该是相对的。关于大多数上班族来说,2023年很难,奉劝大家且行且珍惜。

关于咱们

Swift社区是由 Swift 爱好者一起维护的公益安排,咱们在国内以微信大众号的运营为主,咱们会分享以 Swift实战SwiftUlSwift基础为中心的技能内容,也整理搜集优异的学习资料。

特别感谢 Swift社区 修改部的每一位修改,感谢大家的辛苦付出,为 Swift社区 供给优质内容,为 Swift 语言的发展贡献自己的力量。