当前位置: 首页 > 图灵资讯 > 技术篇> Swift 周报 第三十期

Swift 周报 第三十期

来源:图灵教育
时间:2023-06-11 09:13:13

前言

本期是 Swift 编辑组独立整理了周报的第21期,每个模块都初步形成。如果读者有好的建议,请在文章末尾留言。

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

求别人不如求自己。如果你有更多的技能,你就会少乞求;Swift社区让你拥有更多的技能,更少的嘲笑!

话题讨论:

一些博主在视频社交媒体平台上表示,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 周报 第三十期_App_02

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 周报 第三十期_Swift_03

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. Permutablecoletion 协议

简介

该提案旨在添加一个 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实战,SwiftUl、以Swift为核心的技术内容,也整理收集优秀的学习资料。

特别感谢 Swift社区 编辑部的每一位编辑都感谢您的辛勤工作 Swift社区 为此提供高质量的内容 Swift 语言的发展贡献了自己的力量。