├── .DS_Store
├── .gitignore
├── LICENSE
├── README.md
├── SwiftWeekly
├── .DS_Store
├── SwiftWeekly82_process.md
├── SwiftWeekly88_process.md
├── SwiftWeekly_1.md
├── SwiftWeekly_10.md
├── SwiftWeekly_11.md
├── SwiftWeekly_12.md
├── SwiftWeekly_13.md
├── SwiftWeekly_14.md
├── SwiftWeekly_15.md
├── SwiftWeekly_16.md
├── SwiftWeekly_17.md
├── SwiftWeekly_18.md
├── SwiftWeekly_19.md
├── SwiftWeekly_2.md
├── SwiftWeekly_20.md
├── SwiftWeekly_21.md
├── SwiftWeekly_22.md
├── SwiftWeekly_23.md
├── SwiftWeekly_24.md
├── SwiftWeekly_25.md
├── SwiftWeekly_26.md
├── SwiftWeekly_27.md
├── SwiftWeekly_28.md
├── SwiftWeekly_29.md
├── SwiftWeekly_3.md
├── SwiftWeekly_30.md
├── SwiftWeekly_31.md
├── SwiftWeekly_32.md
├── SwiftWeekly_33.md
├── SwiftWeekly_34.md
├── SwiftWeekly_35.md
├── SwiftWeekly_36.md
├── SwiftWeekly_37.md
├── SwiftWeekly_38.md
├── SwiftWeekly_39.md
├── SwiftWeekly_4.md
├── SwiftWeekly_40.md
├── SwiftWeekly_41.md
├── SwiftWeekly_42.md
├── SwiftWeekly_43.md
├── SwiftWeekly_44.md
├── SwiftWeekly_45.md
├── SwiftWeekly_46.md
├── SwiftWeekly_47.md
├── SwiftWeekly_48.md
├── SwiftWeekly_49.md
├── SwiftWeekly_5.md
├── SwiftWeekly_50.md
├── SwiftWeekly_51.md
├── SwiftWeekly_52.md
├── SwiftWeekly_53.md
├── SwiftWeekly_54.md
├── SwiftWeekly_55.md
├── SwiftWeekly_56.md
├── SwiftWeekly_57.md
├── SwiftWeekly_58.md
├── SwiftWeekly_59.md
├── SwiftWeekly_6.md
├── SwiftWeekly_60.md
├── SwiftWeekly_61.md
├── SwiftWeekly_62.md
├── SwiftWeekly_63.md
├── SwiftWeekly_64.md
├── SwiftWeekly_65.md
├── SwiftWeekly_66.md
├── SwiftWeekly_67.md
├── SwiftWeekly_68.md
├── SwiftWeekly_69.md
├── SwiftWeekly_7.md
├── SwiftWeekly_70.md
├── SwiftWeekly_71.md
├── SwiftWeekly_72.md
├── SwiftWeekly_73.md
├── SwiftWeekly_74.md
├── SwiftWeekly_75.md
├── SwiftWeekly_76.md
├── SwiftWeekly_77.md
├── SwiftWeekly_78.md
├── SwiftWeekly_79_process.md
├── SwiftWeekly_8.md
├── SwiftWeekly_80_process.md
├── SwiftWeekly_81_process.md
├── SwiftWeekly_83_process.md
├── SwiftWeekly_84_process.md
├── SwiftWeekly_85_process.md
├── SwiftWeekly_86_process.md
├── SwiftWeekly_87_process.md
├── SwiftWeekly_9.md
└── 图片.jpeg
└── res
└── 21-GitHub-App.md
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SwiftCommunityRes/SwiftWeekly/ff06500903358fa4b4942368375dd51a01cdcbff/.DS_Store
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## User settings
6 | xcuserdata/
7 |
8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
9 | *.xcscmblueprint
10 | *.xccheckout
11 |
12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
13 | build/
14 | DerivedData/
15 | *.moved-aside
16 | *.pbxuser
17 | !default.pbxuser
18 | *.mode1v3
19 | !default.mode1v3
20 | *.mode2v3
21 | !default.mode2v3
22 | *.perspectivev3
23 | !default.perspectivev3
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 |
28 | ## App packaging
29 | *.ipa
30 | *.dSYM.zip
31 | *.dSYM
32 |
33 | ## Playgrounds
34 | timeline.xctimeline
35 | playground.xcworkspace
36 |
37 | # Swift Package Manager
38 | #
39 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
40 | # Packages/
41 | # Package.pins
42 | # Package.resolved
43 | # *.xcodeproj
44 | #
45 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
46 | # hence it is not needed unless you have added a package configuration file to your project
47 | # .swiftpm
48 |
49 | .build/
50 |
51 | # CocoaPods
52 | #
53 | # We recommend against adding the Pods directory to your .gitignore. However
54 | # you should judge for yourself, the pros and cons are mentioned at:
55 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
56 | #
57 | # Pods/
58 | #
59 | # Add this line if you want to avoid checking in source code from the Xcode workspace
60 | # *.xcworkspace
61 |
62 | # Carthage
63 | #
64 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
65 | # Carthage/Checkouts
66 |
67 | Carthage/Build/
68 |
69 | # Accio dependency management
70 | Dependencies/
71 | .accio/
72 |
73 | # fastlane
74 | #
75 | # It is recommended to not store the screenshots in the git repo.
76 | # Instead, use fastlane to re-generate the screenshots whenever they are needed.
77 | # For more information about the recommended setup visit:
78 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
79 |
80 | fastlane/report.xml
81 | fastlane/Preview.html
82 | fastlane/screenshots/**/*.png
83 | fastlane/test_output
84 |
85 | # Code Injection
86 | #
87 | # After new code Injection tools there's a generated folder /iOSInjectionProject
88 | # https://github.com/johnno1962/injectionforxcode
89 |
90 | iOSInjectionProject/
91 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 SwiftCommunityRes
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/SwiftCommunityRes/SwiftWeekly/releases.atom)
2 |
3 | 
4 |
5 | *一个关注 [Swift.org](https://swift.org) 动态,由社区驱动的每周时事通讯*
6 |
7 | ## 往期回顾
8 |
9 | 周报内容模块分为:**新闻**、**提案**、**Swift论坛**、**推荐博文**。初期计划每两周发布一期,每个模块还在调整磨合期。各位读者如果有好的提议,欢迎提 Issues。
10 |
11 | Swift 周报 第五十二期
12 | Swift 周报 第五十一期
13 | Swift 周报 第五十期
14 |
15 |
16 | 点击查看更多内容
17 | Swift 周报 第五十期
18 | Swift 周报 第四十九期
19 | Swift 周报 第四十八期
20 | Swift 周报 第四十七期
21 | Swift 周报 第四十六期
22 | Swift 周报 第四十五期
23 | Swift 周报 第四十四期
24 | Swift 周报 第四十三期
25 | Swift 周报 第四十二期
26 | Swift 周报 第四十一期
27 | Swift 周报 第四十期
28 | Swift 周报 第三十九期
29 | Swift 周报 第三十八期
30 | Swift 周报 第三十七期
31 | Swift 周报 第三十六期
32 | Swift 周报 第三十五期
33 | Swift 周报 第三十四期
34 | Swift 周报 第三十三期
35 | Swift 周报 第三十二期
36 | Swift 周报 第三十一期
37 | Swift 周报 第三十期
38 | Swift 周报 第二十九期
39 | Swift 周报 第二十八期
40 | Swift 周报 第二十七期
41 | Swift 周报 第二十六期
42 | Swift 周报 第二十五期
43 | Swift 周报 第二十四期
44 | Swift 周报 第二十三期
45 | Swift 周报 第二十二期
46 | Swift 周报 第二十一期
47 | Swift 周报 第二十期
48 | Swift 周报 第十九期
49 | Swift 周报 第十八期
50 | Swift 周报 第十七期
51 | Swift 周报 第十六期
52 | Swift 周报 第十五期
53 | Swift 周报 第十四期
54 | Swift 周报 第十三期
55 | Swift 周报 第十二期
56 | Swift 周报 第十一期
57 | Swift 周报 第十期
58 | Swift 周报 第九期
59 | Swift 周报 第八期
60 | Swift 周报 第七期
61 | Swift 周报 第六期
62 | Swift 周报 第五期
63 | Swift 周报 第四期
64 | Swift 周报 第三期
65 | Swift 周报 第二期
66 | Swift 周报 第一期
67 |
68 |
69 | ## 参与编辑
70 |
71 | Swift 周报开源,欢迎提交 issue,投稿或推荐内容,目前计划每两周周一发布。
72 |
73 | >**招募:** 欢迎志同道合的朋友一起加入周报整理,不仅可以学习各种技巧和知识,还能积累自己的技术影响力
74 |
75 | ## 平台发布
76 |
77 | 公众号:Swift社区

78 |
79 | 博客:[Swift社区](https://fanbaoying.github.io)
80 |
81 | 微博:[Swift中文社区](https://weibo.com/u/7711465033)
82 |
83 | CSDN: [https://blog.csdn.net/qq_36478920](https://blog.csdn.net/qq_36478920)
84 |
85 |
86 | ## 关于我们
87 |
88 | **Swift社区**是由 Swift 爱好者共同维护的组织,欢迎关注公众号:**Swift社区**,后台点击进群,可以进入我们社区的各种交流讨论群。希望我们Swift社区是大家在网络空间中的另一份共同的归属。
89 |
90 | 特别感谢 Swift社区 翻译组的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。
91 |
92 | ## star & 赞助
93 |
94 | 如果这个库有帮助到您,请 Star 一下。
95 |
96 | **感谢您的赞助:** 我们会将您的赞助用于 Swift社区 的建设与维护。
97 |
98 |  
99 |
--------------------------------------------------------------------------------
/SwiftWeekly/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SwiftCommunityRes/SwiftWeekly/ff06500903358fa4b4942368375dd51a01cdcbff/SwiftWeekly/.DS_Store
--------------------------------------------------------------------------------
/SwiftWeekly/SwiftWeekly82_process.md:
--------------------------------------------------------------------------------
1 | ## 前言
2 |
3 | **本期是 Swift 编辑组自主整理周报的第五十期**,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。
4 |
5 | Swift 周报在 [GitHub 开源](https://github.com/SwiftCommunityRes/SwiftWeekly "SwiftWeekly"),欢迎提交 issue,投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。
6 |
7 | 间歇性的努力和蒙混过日子,都是对之前努力的清零。时间永不停歇,社会时刻发展,**Swift社区**也在华丽蜕变!👊👊👊
8 |
9 | > **周报精选**
10 | >
11 | > 新闻和社区:
12 | >
13 | > 提案:
14 | >
15 | > Swift 论坛:
16 | >
17 | > 推荐博文:
18 | >
19 | > **话题讨论:**
20 | >
21 | >
22 | >
23 | >**上期话题结果**
24 |
25 |
26 | ## 新闻和社区
27 |
28 |
29 | ## 提案
30 |
31 |
32 | ## Swift论坛
33 |
34 |
35 | ## 推荐博文
36 |
37 |
38 | ## 话题讨论
39 |
40 |
41 | ## 关于我们
42 |
43 | **Swift社区**是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 **Swift实战**、**SwiftUl**、**Swift基础**为核心的技术内容,也整理收集优秀的学习资料。
44 |
45 | 欢迎关注公众号:Swift社区,后台点击进群,可以进入我们社区的交流讨论群。希望我们Swift社区是大家在网络空间中的另一份共同的归属。
46 |
47 |
48 |
49 | 特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。
50 |
--------------------------------------------------------------------------------
/SwiftWeekly/SwiftWeekly88_process.md:
--------------------------------------------------------------------------------
1 | ## 前言
2 |
3 | **本期是 Swift 编辑组自主整理周报的第五十期**,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。
4 |
5 | Swift 周报在 [GitHub 开源](https://github.com/SwiftCommunityRes/SwiftWeekly "SwiftWeekly"),欢迎提交 issue,投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。
6 |
7 | 间歇性的努力和蒙混过日子,都是对之前努力的清零。时间永不停歇,社会时刻发展,**Swift社区**也在华丽蜕变!👊👊👊
8 |
9 | > **周报精选**
10 | >
11 | > 新闻和社区:
12 | >
13 | > 提案:
14 | >
15 | > Swift 论坛:
16 | >
17 | > 推荐博文:
18 | >
19 | > **话题讨论:**
20 | >
21 | >
22 | >
23 | >**上期话题结果**
24 |
25 |
26 | ## 新闻和社区
27 |
28 |
29 | ## 提案
30 |
31 |
32 | ## Swift论坛
33 |
34 |
35 | ## 推荐博文
36 |
37 |
38 | ## 话题讨论
39 |
40 |
41 | ## 关于我们
42 |
43 | **Swift社区**是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 **Swift实战**、**SwiftUl**、**Swift基础**为核心的技术内容,也整理收集优秀的学习资料。
44 |
45 | 欢迎关注公众号:Swift社区,后台点击进群,可以进入我们社区的交流讨论群。希望我们Swift社区是大家在网络空间中的另一份共同的归属。
46 |
47 |
48 |
49 | 特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。
50 |
--------------------------------------------------------------------------------
/SwiftWeekly/SwiftWeekly_1.md:
--------------------------------------------------------------------------------
1 | ## 前言
2 |
3 | 从本周开始,我们 Swift 社区公众号将开始与 SwiftWeekly 合作更新关于 Swift 社区最新的进展与动向。让我们乘着社区的风帆,一起荡起双桨,让 Swift 成为世界上最好的语言。
4 |
5 | ## 播客
6 |
7 | 在 Swift by Sundell 播客的[第 103 期](https://www.swiftbysundell.com/podcast/103/ "Swift by Sundell 第 103 期")中,SwiftLee 的创建者 [Antoine van der Lee](https://twitter.com/twannl "Antoine van der Lee") 加入了 [John Sundell](https://twitter.com/johnsundell "John Sundell")。
8 |
9 | 他们从新的 concurrency 系统到 convenience 特性以及各种改进等方向讨论了 Swift 5.5 新引入的一部分功能。
10 |
11 | ## 新闻和社区
12 |
13 | Xcode 各版本的 [最低要求和支持的 SDK](https://developer.apple.com/cn/support/xcode/ "最低要求和支持的 SDK")
14 |
15 | [Antoine van der Lee](https://twitter.com/twannl "Antoine van der Lee") 写了一篇博文,[探讨在 Swift 中解包或 throw 的解决方案](https://www.avanderlee.com/swift/unwrap-or-throw/ "Unwrap or throw: Exploring solutions in Swift")。
16 |
17 | [Leonardo Maia Pugliese](https://twitter.com/Leo_Pugliese "Leonardo Maia Pugliese") 写了一篇关于[如何在 Swift 中使用 @available 进行 API 约束](https://holyswift.app/how-to-do-apis-constraints-with-available-in-swift "How to do APIs constraints with @Available in Swift")的博客文章。
18 |
19 | [John Sundell](https://twitter.com/johnsundell "John Sundell") 写了一篇文章解释了如何[在 switch 语句中使用 @unknown default](https://www.swiftbysundell.com/articles/using-an-unknown-default-case-within-a-switch-statement/ "Using ‘@unknown default’ within switch statements")。
20 |
21 | [Bas Broek](https://twitter.com/basthomas "Bas Broek") 写了一篇博文,探讨如何在 Swift 中[弃用 Workarounds](https://www.basbroek.nl/deprecating-workarounds "Deprecating Workarounds")。
22 |
23 | ## 正在审查的提案
24 |
25 | [SE-0321](https://github.com/apple/swift-evolution/blob/main/proposals/0321-package-registry-publish.md "SE-0321"): Package Registry Service - Publish Endpoint 正在[审查中](https://forums.swift.org/t/se-0321-package-registry-service-publish-endpoint/51286 "Package Registry Service - Publish Endpoint")
26 |
27 | 软件包注册表负责确定哪些软件包版本可提供给消费者使用。
28 |
29 | 目前,软件包版本的可用性由 `out-of-band` 流程决定。例如,注册表可以查询公共 Swift 软件包的索引,并为每个标签提供具有有效版本号的版本。
30 |
31 | 拥有发布新版本到软件包注册表的标准端点将增强维护者分发其软件的能力,并促进服务提供商之间的互操作性。
32 |
33 | ## Swift 论坛
34 |
35 | [Dimitri Racordon](https://forums.swift.org/categories "Dimitri Racordon") 提出了一个[用私有字段实现协议的想法](https://forums.swift.org/t/pitch-protocols-with-private-fields/51209 "Protocols with private fields")。
36 |
37 | 在协议中,所有字段(`properties` 和 `methods`)都将获得符合条件类型的访问可见性。例如,符合具有公共类型的协议将提示其所有要求都是公共的。
38 |
39 | [Evan Wilde](https://forums.swift.org/categories "Evan Wilde") 提出了一项[重新审视 async main 语义](https://forums.swift.org/t/pitch-revisit-the-semantics-of-async-main/51254 "Revisit the semantics of async main")的提案。
40 |
41 | * main 函数应该同步运行到第一个暂停点
42 | * main 函数应该在 `main actor` 上运行
43 | * MainActor 应该为默认的 `runloop` 行为提供用户指定的替代方案。
44 | * main 任务应该从 `getCurrentThreadPriority` 拉取优先级,而不是 `hard-coded` 默认优先级
45 |
46 | [Anders Bertelrud](https://forums.swift.org/u/abertelrud "Anders Bertelrud") 提议修改 SE-0303:插件 API,使用 @main 作为插件入口点。
47 |
48 | 我想提议修改 `SE-0303`,`SwiftPM` 插件使用 `@main` 作为入口点,而不是 `top-level` 作为入口点。 虽然这样做有点冗长,但是可以为每种插件定制入口点,并且还可以更加清楚地说明每个插件的输入和预期输出是什么。
49 |
50 | [Jeremy Saklad](https://forums.swift.org/u/saklad5 "Jeremy Saklad") 提出了一项提案,该提案将[允许使用具体的相关协议类型](https://forums.swift.org/t/allow-use-of-concrete-associated-type-of-protocols/51277 "Allow use of concrete associated type of protocols")。
51 |
52 | [Karoy Lorentey](https://twitter.com/lorentey "Karoy Lorentey") 发布了 [Swift Collections 1.0 版](https://forums.swift.org/t/announcement-planning-for-swift-collections-v1-0/51321 "Planning for Swift Collections v1.0")。
53 |
54 | [Konrad ktoso Malawski](https://forums.swift.org/u/ktoso "Konrad ktoso Malawski") 发布了 Swift Server Workgroup [2021 年 8 月 4 日的会议记录](https://forums.swift.org/t/august-4th-2021/51315 "August 4th 2021")。
55 |
56 | [Doug Gregor](https://twitter.com/dgregor79 "Doug Gregor") 提出了 [在 Sendable 检查中实施 Staging](https://forums.swift.org/t/pitch-staging-in-sendable-checking/51341 "Staging in Sendable checking") 的提案。
57 |
58 | `SE-0302` 引入了 Sendable 协议,该协议明确地指出哪些类型的值可以安全地跨过 `actors` 进行复制。通俗的讲,就是拷贝的值和原始值可以同时在上下文使用。
59 |
60 | Sendable 检查在所有 Swift 代码中应用,消除了由 `shared mutable state` 引起的大量数据竞争。Swift 5.5 没有完全实现 Sendable 检查,因为这样做会导致太多的编译器 `errors` 和 `diagnostics`,从而导致该功能不可用。
61 |
62 | 我认为可以逐步采用 Sendable 检查来提高数据竞争的安全性。我们提出了两个想法分段完成 Sendable 检查:
63 |
64 | * 增量采用并发并且引入更多的 Sendable 检查。
65 | * 不能让用户模块之外的 Sendable 问题阻挡进度,防止过度的注释
66 |
67 | [Aura Lily Vulcano](https://forums.swift.org/categories "Aura Lily Vulcano") 推荐了一个 [Swift 默认提供的新模块](https://forums.swift.org/t/pitch-the-cstdlib-module/51373 "The CStdlib module")。
68 |
69 | 该模块将重新导出包含当前平台的 `POSIX` 或类似 `POSIX` 的 C 标准库的正确模块(如果有的话)。
70 |
71 | 默认情况该模块不会被导入,但是允许 “reasonably cross-platform” 代码,以避免使用冗长的 `#if canImport(…)` 链来访问所有的标准库,因为它们在不同的操作系统上有不同的名称。
72 |
73 | 例如,模块可以命名为 CStdlib。
74 |
75 | Robert Widmann([@CodaFi_](https://twitter.com/CodaFi_ "CodaFi_"))提出了一个关于[开始可变参数泛型](https://forums.swift.org/t/pitching-the-start-of-variadic-generics/51467 "The Start of Variadic Generics")的想法。
76 |
77 | 作为改进泛型系统的人体工程学的一部分,以及为使用 tuples 抽象提供更好的支持,我想用 surface syntax 和 preliminary semantics 来实现这个想法。 由于这是一个很大的主题领域,对语言和后续提案的方向都有很大影响,因此你的反馈在此阶段对于塑造此功能集的方向至关重要。
78 |
79 | 我要感谢 **Alejandro Alonso**, **Doug Gregor** 和 **Slava Pestov**,感谢他们为我在这个问题上的思考奠定了基础。
80 |
81 | 可以在这里看到原文的链接 [TypeSequences.md · GitHub](https://gist.github.com/CodaFi/a461aca155b16cd4d05a2635e7d7a361 "TypeSequences.md · GitHub")
82 |
83 | ## 关于我们
84 |
85 | 公众号是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。欢迎关注公众号:**Swift社区**,后台点击进群,联系我们获取更多内容。
86 |
87 |
88 |
89 |
90 | 感谢 SwiftWeekly 与我们的合作,开启 Swift 周报中文版发布之旅。周报仓库:https://github.com/SwiftCommunityRes
91 |
92 | 后续还会翻译大量资料到我们公众号,有感兴趣的朋友,可以加入我们,扫码添加微信
93 |
94 |
95 |
--------------------------------------------------------------------------------
/SwiftWeekly/SwiftWeekly_10.md:
--------------------------------------------------------------------------------
1 | ## 前言
2 |
3 | 前几期周报内容是同步翻译的英文版周报,目前英文版停更,周报停滞半年多。经过多次讨论,我们决定**重启周报**,分模块整理内容同步给大家。
4 |
5 | 周报内容模块分为:**新闻**、**提案**、**Swift论坛**、**推荐博文**。初期计划每两周发布一期,欢迎志同道合的朋友一起加入周报整理。
6 |
7 | 昨日的生活与工作是否也曾迷茫?对新技术渴望突破的心是否依旧执着?**Swift社区**,为你的技术栈添砖加瓦,你,准备好了吗?
8 |
9 | ## 新闻和社区
10 |
11 | ### 苹果先买后付服务被警告:破坏这一新兴行业的竞争
12 |
13 | 据英国《金融时报》7月27日报道,美国消费者金融保护局罗希特·乔普拉向硅谷发出警告。大型科技公司进入“先买后付”贷款业务会破坏这一新兴行业的竞争,他还对客户数据的使用提出了质疑。此前6月6日苹果公司在年度开发者大会上推出“先买后付”的`“Apple Pay Later”`服务,允许用户6周内分4期付款,期间不产生利息等其他费用。(via 泰山财经)
14 |
15 | ### 与 App Store 专家会面交流
16 |
17 | 准备好与专家在线交流探讨,了解如何充分利用 `App Store` 的功能。探索如何吸引新顾客、测试营销策略、添加订阅等等。在整个 8 月,苹果官方将在多个时区以多种语言进行实时演讲和答疑。如果您也是苹果开发者的话,最近肯定收到了相关的邮件邀请吧,不知道您是否参加了本次会面交流呢?(Apple Developer Program)
18 |
19 | ### 即将从 XML Feed 过渡到 App Store Connect API
20 |
21 | `App Store Connect REST API` 让您可以跨各种开发者工具自定义任务并实现任务自动化,使工作流程更灵活、更高效。从 **2022 年 11 月**开始,您将需要使用此 API 来代替 `XML Feed`,从而实现对 App 内购买项目、订阅、元数据和 App 定价的自动化管理。XML Feed 将继续为现有的 `Game Center` 管理功能提供支持。(Apple Developer News)
22 |
23 | ### 新功能 RoomPlan
24 |
25 | 使用 [RoomPlan](https://developer.apple.com/augmented-reality/roomplan/ "Introducing RoomPlan") 创建房间的 3D 户型图,包括家具的尺寸和类型等关键特征。这个是由 ARKit 提供支持的全新 Swift API 能够利用 iPhone 和 iPad 上的摄像头和激光雷达扫描仪将现实环境带入您的 App 中。
26 |
27 | 
28 |
29 | 使用详情可以观看 WWDC22 中的 [使用 RoomPlan 创建参数 3D 房间扫描](https://developer.apple.com/videos/play/wwdc2022/10127/ "Create parametric 3D room scans with RoomPlan")
30 |
31 | ### 立即注册 WWDC22 实验室和聊天室
32 |
33 | [注册实验室和线上聊天室](https://developer.apple.com/news/?id=kvwb7ph4 "Sign up now for WWDC22 labs and lounges"),即可在一整周内与 Apple 工程师、设计师和专家在线交流。
34 |
35 | 
36 |
37 | ### 已推出 Xcode 14 Beta 版
38 |
39 | 包含了适用于所有 Apple 平台 SDK 的 `Xcode 14 Beta` 版现已推出。利用简洁且强大的 Swift 和 SwiftUI 以及全新的跨平台 App 体验,使用编辑器的增强功能更快捷地编写代码,并着手开始进行从 `Xcode Cloud` 到 `TestFlight` 以及 `App Store` 的测试和部署。
40 |
41 | [下载 Xcode 14 Beta 版](https://developer.apple.com/xcode/ "Xcode 14 Beta")
42 |
43 | ## 提案
44 |
45 | ### 通过的提案
46 |
47 | [SE-0352: 隐式开放的存在类型](https://github.com/apple/swift-evolution/blob/main/proposals/0352-implicit-open-existentials.md#introduction 'Implicitly Opened Existentials') **状态:Swift 5.7 已实现**
48 | Swift 中的存在类型允许存储一个特定类型为未知的值,且可能在运行时更改。被存储值的动态类型,我们称为**存在类型的底层类型**,仅由它遵循的协议集以及潜在的超类知道。尽管存在类型对于表达动态类型的值非常有用,但由于它们的动态性质,它们受到一定限制。最近的提议使[存在类型更加明确](https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md 'existential types more explicit'),以帮助开发人员理解这种动态性质,并通过消除一些限制[使存在类型更具表现力](https://github.com/apple/swift-evolution/blob/main/proposals/0309-unlock-existential-types-for-all-protocols.md 'making existential types more expressive')。但是存在类型中的基本类型仍然存在,一旦你有一个存在类型的值,你就很难对其使用泛型。开发者通常会遇到 `protocol 'P' as a type cannot conform to itself` 这样的报错问题。
49 |
50 | **SE-0352: 隐式开放的存在类型** 已于 2022 年 5 月 18 日完成,核心团队已决定接受该提案。第二次审查的重点是关注向前兼容性,当一个调用唤起一个隐式开放的存在类型,必须被抹除类型以防止存在的动态类型内存泄漏到返回值中。当存在类型的表达能力增加,我们可能会有能力使用一个更具体的类型作为这一个调用的返回类型,这可能造成源中断。为了避免这种情况,该提案要求在调用中显式地作为任何 P 类型注释,其中当前可以表达的返回类型将丢弃对被类型擦除的原始关联类型的约束,如提案中的示例所示:
51 |
52 | ```swift
53 | protocol P {
54 | associatedtype A
55 | }
56 | protocol Q {
57 | associatedtype B: P where B.A == Int
58 | }
59 |
60 | func getP(_ p: T)
61 | func getBFromQ(_ q: T) -> T.B { ... }
62 |
63 | func eraseQAssoc(q: any Q) {
64 | let x = getBFromQ(q) // 错误,必须指定 "as any P" 由于缺少 T.B.A == Int 的约束
65 | let y = getBFromQ(q) as any P // 可以, 明确抛弃约束
66 | }
67 | ```
68 |
69 | [SE-0353: 受约束的存在类型](https://github.com/apple/swift-evolution/blob/main/proposals/0353-constrained-existential-types.md 'Constrained Existential Types') **状态:Swift 5.7 已实现**
70 | 存在类型弥补了 Swift 类型系统中的抽象能力。与泛型一样,它们使函数能够获取和返回多种可能的类型。与泛型参数类型不同,存在类型在作为输入传递给函数时不需要预先知道。此外,当从函数返回时,可以删除具体类型(隐藏在协议接口后面)。在这个领域出现了一系列活动,[SE-0309](https://github.com/apple/swift-evolution/blob/main/proposals/0309-unlock-existential-types-for-all-protocols.md#covariant-erasure-for-associated-types 'SE-0309: unlock existential types for all protocols') 解除了对使用具有关联类型的协议作为存在类型的剩余限制,而 [SE-0346](https://github.com/apple/swift-evolution/blob/main/proposals/0346-light-weight-same-type-syntax.md 'SE-0346: light weight same type syntax') 为关联类型协议的轻量级约束语法铺平了道路。该提案直接基于这些想法,旨在在存在类型的上下文中重用轻量级关联类型约束的语法。
71 |
72 | ```swift
73 | any Collection
74 | ```
75 |
76 | [SE-0356: Swift 代码片段](https://github.com/apple/swift-evolution/blob/main/proposals/0356-swift-snippets.md 'Swift Snippets')
77 | 该提案描述了编写成为片段的新形式示例代码的约定。片段是简短的单文件示例,可以在 Swift 包中构建和运行,可以访问该包中的其他代码,并且可以以多种方式使用。
78 |
79 |
80 | ### 正在审查的提案
81 |
82 | [SE-0359: 构建时间常数值](https://github.com/apple/swift-evolution/blob/main/proposals/0359-build-time-constant-values.md 'Build-Time Constant Values') **状态:已接受**
83 | 构建时间常数值是一个 Swift 语言特性,要求在编译时知道某些值。这是通过属性、`@const`、约束属性和函数参数来实现的,以使其具有编译时可知的值。这些信息为未来更丰富的编译时特性奠定了基础,例如在编译时提取和验证值。
84 |
85 | [SE-0362: 即将到来的语言改进的逐渐采用](https://github.com/apple/swift-evolution/blob/main/proposals/0362-piecemeal-future-features.md 'Piecemeal adoption of upcoming language improvements') **状态:已接受**
86 | Swift 6 积累了许多对语言有源码兼容性影响的改进,从而在以前的语言模式(Swift 4.x 和 Swift 5.x)中默认情况下无法启用它们。这些改进已经在背后为 Swift 6 语言模式的 Swift 编译器中实现,但他们对于开发者是无法访问的,并将持续直到 Swift 6 作为一个可获得的语言模式。这有很多原因,为什么我们应该思考尽快提供这些改动。
87 |
88 | - 开发者希望很快从这些改进中受益,而不是等到 Swift 6 可用。
89 | - 向开发者提供这些改进比 Swift 6 提供更多体验优先级更高,如果有必要,允许我们针对 Swift 6 进一步调试它们。
90 | - 对于某些模块,所有在 Swift 6 中改动的总数或许会造成迁移繁重,并且在 Swift 4.x/5.x 中逐一采纳这些语言改动,可以使过渡期路径变得丝滑。
91 |
92 | 一些提案已经引入了定制解决方案来提供迁移路径:[SE-0337](https://github.com/apple/swift-evolution/blob/main/proposals/0337-support-incremental-migration-to-concurrency-checking.md 'support-incremental-migration-to-concurrency-checking') 添加了 `-warn-concurrency` 在 Swift 4.x/5.x 中启用与 `Sendable` 相关检查的警告。 [SE-0354](https://github.com/apple/swift-evolution/blob/main/proposals/0354-regex-literals.md 'regex-literals') 添加标志 `-enable-bare-slash-regex` 以启用原始 `/.../` 正则表达式语法。尽管它不是提案的一部分,但对 [SE-0335](https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md 'existential-any') 的讨论包括对编译器标志的请求,以在存在类型上要求使用 `any` 。这些都具有相同的风格,即选择现有的 Swift 4.x/5.x 代码进行改进,这些改进将出现在 Swift 6 中。
93 |
94 | 这个提议明确地包含了零碎的、有意采用的特性,这些特性在 Swift 6 之前出于源代码兼容性的原因而保留。它为逐步采用 Swift 6 特性建立了一条直接路径,以在 Swift 4.x/5.x 代码库中获得它们的优势,并顺利迁移到 Swift 6 语言模式。开发人员可以使用新的编译器标志 `-enable-upcoming-feature X` 为该模块启用名为 `X` 的特定功能,并且可以以这种方式指定多个功能。当开发人员移动到下一个主要语言版本时,该语言版本将隐含 `X` 并且编译器标志将被拒绝。这样,即将推出的功能标志只会累积到下一个主要的 Swift 语言版本,然后被清除,所以我们不会将语言分拆成不兼容的方言。
95 |
96 | ## Swift论坛
97 |
98 | 1. [SwiftUI 中的新功能](https://developer.apple.com/forums/tags/wwdc2022-10052 "What's new in SwiftUI") 围绕 `WWDC2022-10052` 内容进行讨论
99 |
100 | 2. [Swift 正则表达式](https://developer.apple.com/forums/tags/wwdc2022-110357 "Meet Swift Regex") 围绕 `WWDC2022-110357` 内容进行讨论
101 |
102 | 3. [SwiftUI 导航](https://developer.apple.com/forums/tags/wwdc2022-10054 "The SwiftUI cookbook for navigation") 围绕 `WWDC2022-10054` 内容进行讨论
103 |
104 | 4. [Swift 图表](https://developer.apple.com/forums/tags/wwdc2022-10137 "Swift Charts") 围绕 `WWDC2022-10137` 内容进行讨论
105 |
106 | 5. 使用 [cmake 构建 swift](https://forums.swift.org/t/using-cmake-to-build-swift-instead-of-build-script/59095 "Using cmake to build swift") 而不是 `build-script`。
107 |
108 | `build-script` 是 `build-script-impl` 的 python 包装器,本身是一个 `shell` 脚本,然后运行 CMake,执行可以构建项目的工作主体。 例如,如果您想执行 `utils/build-script -x`,将调用 `cmake -G Xcode`。
109 |
110 | 6. **Visual Studio Code** [增加扩展包](https://forums.swift.org/t/introducing-swift-for-visual-studio-code/54246 "VSCode extension") 支持 Swift 开发
111 |
112 | 7. [SwiftNIO _ChannelInboundHandler 与 DocC 不兼容](https://forums.swift.org/t/swiftnio-channelinboundhandler-is-docc-incompatible/58611 "SwiftNIO _ChannelInboundHandler is DocC incompatible")
113 |
114 | 在阅读 swift-biome 中的 `SwiftNIO` 文档时,遇到一个问题。文档其中引用了 3 个带下划线的属性。例如:`_ChannelInboundHandler`、`_EmittingChannelHandler` 等,但是这些属性在 swift-biome 和其他基于 `SymbolGraphGen` 的工具是不可见的,包括 DocC。
115 |
116 | 8. [Foundation 中基于 KeyPath 的对比 API](https://twitter.com/natpanferova/status/1547103127429857280 "KeyPath-based comparison API in Foundation")
117 |
118 | 在 `Foundation` 中引入的 `KeyPathComparator` API,比 Swift 中的 `sorted(by:)` 方法更清晰。这个 API 可以根据数组中的某个特定元素进行排序。
119 |
120 | 
121 |
122 |
123 | ## 推荐博文
124 |
125 | **SwiftUI 动画系列**,文章结合动画 Gif 原图和源码为案例,深入探讨了如何创建应用 SwiftUI 动画。
126 |
127 | [高级 SwiftUI 动画 — Part 1:Paths](https://mp.weixin.qq.com/s/5KinQfNtcovf_451UGwLQQ)
128 |
129 | **摘要:** 本文主要介绍了显式动画和隐式动画,以及针对 Animatable 协议的相关讨论。
130 |
131 | [高级 SwiftUI 动画 — Part 2:GeometryEffect](https://mp.weixin.qq.com/s/rE_HILLt-uxzScS7wXh5jw)
132 |
133 | **摘要:** 主要介绍使用新工具 GeometryEffect 创建 SwiftUI 动画。GeometryEffect是一个符合Animatable 和 ViewModifier 的协议。
134 |
135 | [高级 SwiftUI 动画 — Part 3:AnimatableModifier](https://mp.weixin.qq.com/s/M6MW3idXS6jZJtl4Mz5DGQ)
136 |
137 | **摘要:** 本文主要介绍使用 AnimatableModifier 完成更加复杂的动画效果。AnimatableModifier 是一个 ViewModifier,符合 Animatable 协议,如果对这个协议不了解可以阅读之前发布的两篇文章。
138 |
139 | [SwiftUI 动画进阶 — Part4:TimelineView](https://mp.weixin.qq.com/s/9OBtFNb5ddnx4_fS93Mnrg)
140 |
141 | **摘要:** 前三篇高级 SwiftUI 动画是作者在实战中总结的内容。本篇文章,我们将详细地探索 TimelineView。
142 |
143 | [SwiftUI 动画进阶 — Part 5:Canvas](https://mp.weixin.qq.com/s/0kkHpzv4Y9O5d7InEAKbEw)
144 |
145 | **摘要:** 本篇文章将探索 Canvas 视图。从技术上讲,它不是一个动画视图,但当它与第四部分的 TimelineView 结合时,可以现实很多有趣的功能。
146 |
147 | ## 关于我们
148 |
149 | **Swift社区**是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 **Swift实战**、**SwiftUl**、**Swift基础**为核心的技术内容,也整理收集优秀的学习资料。
150 |
151 | 欢迎关注公众号:Swift社区,后台点击进群,可以进入我们社区的交流讨论群。希望我们Swift社区是大家在网络空间中的另一份共同的归属。
152 |
153 |
154 |
155 | 特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。
156 |
--------------------------------------------------------------------------------
/SwiftWeekly/SwiftWeekly_11.md:
--------------------------------------------------------------------------------
1 | ## 前言
2 |
3 | **本期是 Swift 编辑组自主整理周报的第二期**,每个模块还在调整磨合期。各位读者如果有好的提议,欢迎在文末留言。
4 |
5 | Swift 周报在 [GitHub 开源](https://github.com/SwiftCommunityRes/SwiftWeekly "SwiftWeekly"),欢迎提交 issue,投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。
6 |
7 | 平凡的八月,不平凡的世界,你若落后,必定挨打,你若前进,方得始终!**Swift社区**,给你最新的指引,给你最真的铠甲!
8 |
9 | > **周报精选**
10 | >
11 | > 新闻和社区:已消失 5 年 iPhone 电量百分比为何现在回归
12 | >
13 | > 提案:和脚本语言相媲美的字符串算法
14 | >
15 | > Swift 论坛:你是否希望支持在 Windows 上构建 Swift
16 | >
17 | > 推荐博文:Swift社区 成立文章仓库
18 |
19 | ## 新闻和社区
20 |
21 | ### 已消失 5 年 iPhone 电量百分比为何现在回归?
22 |
23 | 2017年,iPhone X 以后,电量百分比一直隐藏在下拉通知栏,而现在,在最新测试版的 iOS 16系统中,电量百分比以数字形式被写入电池图标内。
24 |
25 | 
26 |
27 | 如果苹果在下一代 iPhone 上增加一个常亮显示功能,那么这种电池百分比调整也会很有用,因为用户可以在不碰手机的情况下就可查看电池状态。还有传言称,iPhone14 系列将会在 Pro 机型上采用挖孔屏,顶部更大的显示面积或许也是苹果复活百分比显示的原因之一。
28 |
29 | 苹果发言人没有立即透露这个电池百分比调整是否会延续到 iOS 16 的最终版本。这次更新目前只出现在开发者版和公测版。新iOS系统将于今年秋天发布,可能是在 9 月份,届时苹果预计将发布iPhone 14。@凤凰网科技
30 |
31 | ### 线上讲座:App 内购买的新功能
32 | 诚挚邀请您参加我们于 2022 年 8 月 18 日(周四)在线举办的“线上讲座:App 内购买的新功能”。
33 |
34 | 建议参会对象:开发人员。
35 |
36 | 注册成功并收到活动确认函后方可参会。名额有限,报满即止。
37 | 设计开发加速器活动注册指南:
38 | https://essentials.applesurveys.com/WRQualtricsControlPanel_rel/File.php?F=F_a4rFfRXziNGhoAm
39 |
40 | 请持续关注 Apple 开发者官网:https://developer.apple.com/cn/accelerator/
41 | 我们会不定期地发布下期活动信息,届时可自行申请,获得批准后即可参加活动。
42 |
43 | 了解如何使您的 App 内购买体验更加完美, 并探索 StoreKit 2 和 App Store Server API 的增强功能和 App Store Server 通知的改进。了解如何利用 App Transaction API 验证 App 的购买,为 StoreKit 模型添加属性,并在交易中保留 App 的 applicationUsername。如果您是服务器端开发人员,我们将向您展示如何充分利用 App Store 服务器通知、检索用户交易历史的其他方法,以及当您的服务器出现故障时如何进行恢复。了解如何迁移到最新的 App Store Server API 并整合 App Store 服务器通知。
44 |
45 | 在线活动议程:
46 | 10:00-10:30 StoreKit 2 的新功能
47 | 10:30-11:00 App Store 服务器 API 和服务器通知新功能
48 |
49 | ### 外媒:苹果要供应商从台湾地区向中国大陆供货时严格遵守中方规定
50 |
51 | 【环球时报综合报道】在美国众议院议长佩洛西窜访台湾遭谴责之际,美国科技巨头苹果公司已要求其供应商从台湾地区向中国大陆供货时严格遵守中国海关有关规定。截至记者 5 日发稿时,苹果方面尚未就有关报道予以置评。
52 |
53 | 《日经亚洲》5 日引述消息人士的说法报道称,苹果公司告诉其供应商,中国海关要求台湾地区生产的元件进入大陆时必须标注产地为“中国台湾”或“中国台北”。苹果公司敦促供应商严肃对待此事,避免因违规导致供货受影响。报道称,苹果公司供应商目前正在为新款iPhone和今秋其他苹果新品的元件供货做准备。消息人士称,如在进口文件、表格中或包装箱上将商品生产地标注为“台湾”,中国海关可能将商品扣留检查,违规商品将被处以 4000 元人民币罚款,或被拒绝通关。
54 |
55 | ### Apple Entrepreneur Camp 已开放申请,欢迎女性、黑人和西班牙裔/拉丁裔创业者参加
56 |
57 | 
58 |
59 | Apple Entrepreneur Camp 旨在为 App 驱动型组织中的少数群体创业者及开发者提供支持,助力其研发新一代的前沿 App 并开拓全球网络,鼓励这些创业者在技术领域不断探索并取得持续发展。
60 |
61 | 三组面向女性、黑人以及西班牙裔及拉丁裔创业者的在线课程将在 2022 年 10 月开展,欢迎选择合适的一组提交申请。课程期间,Apple 工程师将为学员提供编程指导,Apple 高层也将作为导师分享见解、启发灵感。申请截止日期为 2022 年 8 月 24 日。
62 |
63 | ## 提案
64 |
65 | ### 通过的提案
66 |
67 | [SE-0365](https://github.com/apple/swift-evolution/blob/main/proposals/0365-implicit-self-weak-capture.md "SE-0365") **在 `self` 被解包后,允许为`weak self`捕获隐式`self`** 提案已通过。
68 |
69 | 从 **SE-0269** 开始,当 `self` 在捕获列表中显式写入时,允许在闭包中使用**隐式 self**。 应该将这种方式支持扩展到 `weak self` 捕获,并且只要 `self` 已解包,就允许**隐式 self** 。
70 |
71 | ```Swift
72 | class ViewController {
73 | let button: Button
74 |
75 | func setup() {
76 | button.tapHandler = { [weak self] in
77 | guard let self else { return }
78 | dismiss()
79 | }
80 | }
81 |
82 | func dismiss() { ... }
83 | }
84 | ```
85 |
86 | [SE-0362](https://github.com/apple/swift-evolution/blob/main/proposals/0362-piecemeal-future-features.md "SE-0362") **即将到来的语言改进的逐渐采用** 提案已通过。该提案已在上期周报正在审查的提案模块做了详细介绍。
87 |
88 | [SE-0357](https://github.com/apple/swift-evolution/blob/main/proposals/0357-regex-string-processing-algorithms.md "SE-0357") **基于正则表达式的字符串算法** 提案已通过。
89 |
90 | 与其他比较常用的编程语言或者脚本语言相比,Swift 标准库处理字符串算法的功能明显不足。其中一些功能可以在 `NSString` 中找到,但是这些基础的功能应该在 Swift 标准库中完善。
91 |
92 | **本提案中的建议如下:**
93 |
94 | 1. 新增加到标准库的正则表达式字符串算法,功能性和实用性要和脚本语言相媲美
95 | 2. 就子序列而言,这些算法与通用 `Collection` 相同
96 | 3. `CustomConsumingRegexComponent` 协议允许第三方库提供 `industrial-strength` 作为正则表达式的可混合组件
97 |
98 | ### 正在审查的提案
99 |
100 | [SE-0368](https://github.com/apple/swift-evolution/blob/main/proposals/0368-staticbigint.md "SE-0368") **StaticBigInt** 正在审查
101 |
102 | Swift 源代码中的整数文字可以表示任意大的值。但是符合 `ExpressibleByIntegerLiteral` 协议的标准库之外的类型,在实际使用过程中受限于使用多大的文字值来构建。
103 |
104 | 因为传递给 `init(integerLiteral:)` 的值必须是标准库支持的类型,因此很难在标准库之外编写新的整数类型。
105 |
106 | [SE-0367](https://github.com/apple/swift-evolution/blob/main/proposals/0367-conditional-attributes.md "SE-0367") **优化新属性的条件编译** 正在审查
107 |
108 | 随着时间的推移,Swift 引入了一些新的属性来优化性能,提供更多的表达能力和编译检查等功能。但是在现有的源码中增加新属性意味着旧的编译器无法进行编译。
109 |
110 | 可以使用条件编译来解决这个问题,但是实现代码冗长很不方便。例如,使用 #if 检查编译器版本确定是否可以使用 `@preconcurrency` 属性,代码如下:
111 |
112 | ```Swift
113 | #if compiler(>=5.6)
114 | @preconcurrency protocol P: Sendable {
115 | func f()
116 | func g()
117 | }
118 | #else
119 | protocol P: Sendable {
120 | func f()
121 | func g()
122 | }
123 | #endif
124 | ```
125 |
126 | 通过上面的代码可以看到,这样实现会有很多重复的代码。另外 `Swift 5.6` 编译器是第一个包含 `@preconcurrency` 属性的编译器,但是有可能这个属性在 5.6 以前就被启用,或者在 `Swift 5.6` 的开发过程中启用,通过判断版本号就会有误差。建议采用下面的代码方式来规避这些问题。代码如下:
127 |
128 | ```Swift
129 | #if hasAttribute(preconcurrency)
130 | @preconcurrency
131 | #endif
132 | protocol P: Sendable {
133 | func f()
134 | func g()
135 | }
136 | ```
137 |
138 | [SE-0366](https://github.com/apple/swift-evolution/blob/main/proposals/0366-move-function.md "SE-0366") **代码上下文新增敏感关键字 move** 正在审查
139 |
140 | 在代码中使用 `move` 关键字,可以结束 `let`、`var` 或者 `consuming` 函数参数的生命周期。并通过编译器实时做出判断强制执行此操作。示例代码如下:
141 |
142 | ```Swift
143 | useX(x) // do some stuff with local variable x
144 |
145 | // Ends lifetime of x, y's lifetime begins.
146 | let y = move x // [1]
147 |
148 | useY(y) // do some stuff with local variable y
149 | useX(x) // error, x's lifetime was ended at [1]
150 |
151 | // Ends lifetime of y, destroying the current value.
152 | move y // [2]
153 | useX(x) // error, x's lifetime was ended at [1]
154 | useY(y) // error, y's lifetime was ended at [2]
155 | ```
156 |
157 | ## Swift论坛
158 |
159 | 1) [关于支持在 Windows 上构建 Swift 的讨论](https://forums.swift.org/t/swift-as-a-cross-platform-language-and-windows-support/12547/9 "Swift as a cross-platform language and Windows support")
160 |
161 | 2) [如何从数据中读取 UInt32](https://forums.swift.org/t/how-to-read-uint32-from-a-data/59431 "How To Read UInt32 from a Data?")
162 |
163 | 3) [有什么方法可以显示依赖发生的原因](https://forums.swift.org/t/any-way-to-show-what-led-to-a-dependency/59512 "Any way to show what led to a dependency?")
164 |
165 | 是否有 `SPM` 命令来显示依赖项是如何产生的?可以显示指定 Swift 包在构建中生成的所有依赖路径。
166 |
167 | 4) [如何延迟对异步方法的响应](https://forums.swift.org/t/how-do-delay-the-response-to-an-async-method/59504 "How do delay the response to an async method?")
168 |
169 | 有一个网络请求,源码如下:
170 |
171 | ```Swift
172 | func downloadRequested(_ request: DownloadRequest) async throws -> Response {
173 | let download = try await self.download(for: request)
174 |
175 | self.transferIdMap[download.transferId] = download.itemId
176 |
177 | let size = try Int64(download.dataProvider.size())
178 |
179 | return (download.transferId, size, download.originalFilename, download.dataProvider.mimeType)
180 | }
181 | ```
182 |
183 | 对这个网络请求的速率进行限制。当有很多的请求未完成时,希望延迟此方法的执行,并将异步回调返回给方法调用者。维持 `async/await` 流程。
184 |
185 | 5) [在 Linux 上使用 swift Package 中的动态库](https://forums.swift.org/t/use-a-dynamic-library-in-a-swift-package-on-linux/59510 "Use a dynamic library in a swift package on Linux")
186 |
187 | 在 Apple 平台上,使用 swift Package 中的动态库非常容易。只需要创建一个 `.xcframework` 其中包含 `.dylib` 文件和头文件,并使用 `binaryTarget` 将其添加到 Package 中。在 Linux 上,没有这么简单的解决方案。
188 |
189 | 6) [提议成立 Swift Tooling 工作组](https://forums.swift.org/t/pitch-swift-tooling-workgroup/59515 "Swift Tooling Workgroup")
190 |
191 | 目前有许多工具类领域处于无人管理的状态。应该需要有一个小组来监督、推动和指导工作。这些领域包含:**SwiftPM、SourceKit-LSP**、**VSCode 扩展**、**LSP、Swift Format**、**API Breaking Change checker**、**Swiftly**、**Docker 镜像**、**DocC**、**SwiftMarkdown** 等等。
192 |
193 | 7) [通过 JS 调用 Swift 方法](https://developer.apple.com/forums/thread/711772 "Call Swift functions from JS")
194 |
195 | 8) [如何对 NavigationLink 中的 tag 和 selection 进行转换](https://developer.apple.com/forums/thread/711841 "NavigationLink")
196 |
197 | ```Swift
198 | List(workoutTypes) { workoutType in
199 | NavigationLink(
200 | workoutType.name,
201 | destination: SessionPagingView(),
202 | tag: workoutType,
203 | selection: $workoutManager.selectedWorkout
204 | )
205 | }
206 | ```
207 |
208 | 在 iOS 16中 `init(_:destination:tag:selection:)` 方法被弃用。Apple 建议在` NavigationStack` 或者
209 | `NavigationSplitView` 的列表中使用 `NavigationLink(_:value:)`。
210 |
211 | ## 推荐博文
212 |
213 | [Swift 社区文章仓库](https://mp.weixin.qq.com/s/U1Uw7Ze9Bsmzx0Of4hh1gw)
214 |
215 | **摘要:** 给大家推荐一下 Swift社区 的文章仓库,里面整理了公众号中的文章,并进行分类(**Swift 进阶**、**Swift 基础**、**SwiftUI 进阶**、**SwiftUI 基础**、**Tips**、**iOS**、**面试**)。方便大家查找阅读。以后会同步更新维护。
216 |
217 | [解决 Flutter 引起的 iOS 内存崩溃问题](https://mp.weixin.qq.com/s/exaRmdUnpzSvlJ2BGSODgw)
218 |
219 | **摘要:** 业界首发,很多开发者会被这个问题困扰。如果你的 Flutter 版本号小于等于 `2.5.3` 或大于等于 `3.0.5`,以下描述的问题将不会发生在你的应用中,但是我相信大部分应用都会命中此区间。
220 |
221 | [swift-5.5.1-RELEASE源码编译(Xcode)](https://mp.weixin.qq.com/s/3emjAHwr7GDExBiB2cAqWQ)
222 |
223 | **摘要:** 使用 ninja 构建 `swift-5.2.4-RELEASE` 版本,然后通过 vscode 和 `lldb` 插件来调试 swift 源码。
224 |
225 | [货拉拉 iOS 司机端线程治理总结](https://juejin.cn/post/7129391597967376415 "货拉拉 iOS 司机端线程治理总结")
226 |
227 | **摘要:** 经常会收到司机反馈手机发烫,耗电,crash等等问题。线程治理专项应运而生,目的就是降低crash,手机发烫,耗电等问题,尽量给原本并不富裕的内存,雪中送炭。
228 |
229 | [使用 Swift Package 插件生成代码](https://mp.weixin.qq.com/s/0ZHfaTiJXAXrWj5qTunhLg)
230 |
231 | **摘要:** 在 Xcode 14 的公告中说明,允许在 Xcode 项目中使用 Swift Package 插件,以及一些架构更改。例如本文的Swift Package 插件生成代码。
232 |
233 | ## 关于我们
234 |
235 | **Swift社区**是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 **Swift实战**、**SwiftUl**、**Swift基础**为核心的技术内容,也整理收集优秀的学习资料。
236 |
237 | 欢迎关注公众号:Swift社区,后台点击进群,可以进入我们社区的交流讨论群。希望我们Swift社区是大家在网络空间中的另一份共同的归属。
238 |
239 |
240 |
241 | 特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。
242 |
--------------------------------------------------------------------------------
/SwiftWeekly/SwiftWeekly_12.md:
--------------------------------------------------------------------------------
1 | ## 前言
2 |
3 | **本期是 Swift 编辑组自主整理周报的第三期**,每个模块还在调整磨合期。各位读者如果有好的提议,欢迎在文末留言。
4 |
5 | Swift 周报在 [GitHub 开源](https://github.com/SwiftCommunityRes/SwiftWeekly "SwiftWeekly"),欢迎提交 issue,投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。
6 |
7 | 夏夜恬静月色柔,绵绵思绪埋心头,**Swift社区**常逗留,今夕明朝百事欧。欧拉欧拉👊👊👊
8 |
9 | > **周报精选**
10 | >
11 | > 新闻和社区:苹果曝出严重安全漏洞!黑客或可完全接管设备
12 | >
13 | > 提案:改进指针系列初始化和缓冲区
14 | >
15 | > Swift 论坛:使用 Swift 5.5 / Xcode 14 构建后崩溃
16 | >
17 | > 推荐博文:iOS16 引入 SwiftUI Charts
18 |
19 | ## 新闻和社区
20 |
21 | ### 苹果曝出严重安全漏洞!黑客或可完全接管设备
22 |
23 | 当地时间 8 月 19 日(周五),苹果公司(Apple)呼吁用户立刻下载最新更新。就在两天前,该公司报告了一个重大的安全漏洞,据称可以让黑客接管苹果设备。
24 | 在周三发布的安全更新中,苹果表示该漏洞可能已被用于攻击行为。
25 |
26 | “这就是我们所说的零日漏洞,也就是在公司发现并能够做出回应之前,已经被黑客所使用过的漏洞,” 美国麦迪安网络安全公司(Mandiant)的高级威胁情报顾问杰米·科利尔(Jamie Collier)介绍道。
27 |
28 | 据介绍,受本次漏洞影响的设备涵盖了几乎所有的苹果产品。其中,手机包括 iPhone 6S 及以后的型号;平板包括第五代及以后的 iPad,所有 iPad Pro,以及 iPad Air 2;电脑则是运行 MacOS Monterey 的 Mac。此外,该漏洞还能影响到部分型号的 iPod。@看看新闻
29 |
30 | ### App 和 app 内购买项目即将实行税率和价格调整
31 |
32 | 2022 年 8 月 19 日的下周开始,加纳和土耳其 App Store 的 App 及 App 内购买项目 (自动续期订阅除外) 的价格将有所提高。加纳的价格提升将包含 **12.5%** 的新增值税和 **6%** 的附加税。
33 |
34 | 您的收益将随之进行调整,并会根据不含税的价格来进行计算。《付费 App 协议》的附录 B 已更新,表明 Apple 在加纳征收和汇付适用税款。
35 |
36 | 此外,如果您在 App Store Connect. 中选择了适当的税收类别,爱沙尼亚的电子出版物的收益已经进行了调整,以反映增值税从 **9%** 下调至 5%。
37 |
38 | 以上调整生效后,在“我的 App”中“价格与销售范围”部分会随即更新。您可以随时在 App Store Connect 中更改您的 App 和 App 内购买项目的价格 (包括自动续期订阅)。如果您有提供订阅项目,您可以选择为现有订阅者保留当前价格。
39 |
40 | 苹果发言人没有立即透露这个电池百分比调整是否会延续到 iOS 16 的最终版本。这次更新目前只出现在开发者版和公测版。新 iOS 系统将于今年秋天发布,可能是在 9 月份,届时苹果预计将发布 **iPhone 14**。@凤凰网科技
41 |
42 | ### 苹果 AppleOne 将捆绑销售电话套餐:英国运营商EE是第一家
43 |
44 | 英国运营商 EE 近日宣布,它将成为第一家将苹果 Apple One 与电话套餐捆绑在一起的运营商。EE表示,苹果 Apple One 将从 8 月 31 日起包含在其 Full Works 计划中。该计划将包括 Apple One 的个人版订阅,每月费用为 14.95 英镑(约 122.44 元人民币)。
45 |
46 | 苹果 Apple One 订阅包将最多六项苹果服务捆绑到一个订阅中,个人版单独订阅价格为每月 14.95 美元(约 101.51 元人民币),包括四项苹果服务:50GB 的 iCloud+、Apple Music、Apple TV+ 和 Apple Arcade 订阅。
47 |
48 | iPhone13 系列成美国最畅销手机机型# 2022 年 Q2 美国最畅销的 10 款智能手机机型,包括苹果、三星、联想三个品牌。其中,苹果 iPhone 13、iPhone 13 Pro Max、iPhone 13 Pro 包揽前三位。三星 Galaxy S21、Galaxy S22 / Ultra 等 5 款新机进入畅销榜前十,Galaxy S22 Ultra 5G 为 2022 年 Q2 美国最畅销的安卓机型。(来源:(来源: 极目新闻))
49 |
50 | ### 赔偿 2 亿元!苹果因搜包耽误员工下班,遭 1 万多人集体起诉
51 |
52 | 据路透社 8 月 15 日报道消息,当地时间 13 日,美国加州一名法官已经签署了苹果公司的 3050 万美元(约合人民币 2 亿元)的和解协议。该诉讼持续 9 年,诉讼称苹果公司没有为下班时检查员工行李的时间付费。
53 |
54 | 起诉源于苹果之前的一项规定,这项规定要求在下班时检查苹果员工的包和个人物品。2013 年,一群苹果公司员工因被迫接受行李检查起诉苹果公司,称公司没有为搜包的时间付费。原告称,苹果零售员工在下班后通常要等几分钟,有时甚至更长时间,才能检查完他们的行李,然后才能离开他们工作的商店。在被提起诉讼后,苹果不再对员工下班前进行搜包检查。
55 |
56 | 据纽约邮报 2015 年 6 月的报道,公布的一份法庭文件显示,至少有两名苹果零售店员工直接向首席执行官库克投诉,称该公司将检查零售员工行李作为安全预防措施的规定令人尴尬和有辱人格。
57 |
58 | 集体诉讼于 2015 年被驳回,随后他们决定上诉。州法院在 2020 年对苹果作出裁决,称期望员工不带个人物品上班是不切实际的。联邦法院随后恢复了此案,美国地方法院法官威廉·阿尔苏普去年表示,他计划对原告作出简易判决,并下令对损害赔偿进行审判。
59 |
60 | 8 月 13 日,阿尔苏普在集体诉讼中批准了和解协议。这标志着该州历史上最大的安全搜查案和解。3050 万美元的和解金将支付给包括居住在加州的 14683 名苹果员工在内的一个群体,平均每位员工获得 1328 美元赔偿金。(来源:极目新闻)
61 |
62 | ## 提案
63 |
64 | ### 通过的提案
65 |
66 | [SE-0367](https://github.com/apple/swift-evolution/blob/main/proposals/0367-conditional-attributes.md "SE-0367") **优化新属性的条件编译** 提案已通过。该提案已在上期周报正在审查的提案模块做了详细介绍。
67 |
68 | ### 正在审查的提案
69 |
70 | [SE-0371](https://github.com/apple/swift-evolution/blob/main/proposals/0371-isolated-synchronous-deinit.md "SE-0371") **Isolated synchronous deinit** 提案正在审查。
71 |
72 | 此功能允许 `deinit` 中 `actor` 和 `global-actor` 的 `isolated` 类型 (GAIT), 访问 `non-sendable` 的 `isolated` 状态,从而解除 [SE-0327](https://github.com/apple/swift-evolution/blob/main/proposals/0327-actor-initializers.md "SE-0327") 施加的限制。这是通过在 `__deallocating_deinit()` 中实现,为跳转到执行程序提供运行时支持。
73 |
74 |
75 | [SE-0370](https://github.com/apple/swift-evolution/blob/main/proposals/0370-pointer-family-initialization-improvements.md "SE-0370") **改进指针系列初始化和缓冲区** 提案正在审查。
76 |
77 | `UnsafeMutablePointer` 系列中的类型通常需要手动管理内存分配,包括管理其初始化状态。但是,并非该系列中的每个相关类型都具有一定的功能来管理内存的初始化状态。分配后涉及的状态如下:
78 |
79 | 1. 没有绑定和没有初始化(从 `UnsafeMutableRawPointer.allocate()` 返回)
80 | 2. 绑定到类型,没有未初始化(从 `UnsafeMutablePointer.allocate()` 返回)
81 | 3. 绑定到类型,并初始化
82 |
83 | 只要内存未初始化,就可以安全地释放内存。
84 |
85 | 我们打算完善该系列中每个相关成员的初始化功能:`UnsafeMutablePointer`、`UnsafeMutableRawPointer`、`UnsafeMutableBufferPointer`、`UnsafeMutableRawBufferPointer`、`Slice` 和 `Slice`。该功能将允许在更多种类的情况下管理初始化状态,包括更轻松地处理部分初始化的缓冲区。
86 |
87 | [SE-0365](https://github.com/apple/swift-evolution/blob/main/proposals/0365-implicit-self-weak-capture.md "SE-0365") **增加对协议 CustomDebugStringConvertible 到 AnyKeyPath 的一致性** 提案正在审查。
88 |
89 | ## Swift论坛
90 |
91 | 1) 围绕 [提议 Async buffered channel](https://forums.swift.org/t/pitch-async-buffered-channel/59854 "Async buffered channel") 进行的讨论
92 |
93 | 内容概括:创建一个总集 channel 可以在 Tasks 之间交流,主要用于一个 task 产生的 value 可以被另一个 task 使用。
94 |
95 | 2) [新问题:使用 Swift 5.5 / Xcode 14 构建后崩溃](https://forums.swift.org/t/new-crash-after-building-with-swift-5-5-xcode-14/59798 "使用 Swift 5.5 / Xcode 14 构建后崩溃")
96 |
97 | 内容概括:swift 代码使用地址引用传入 NSMutableArray 类型给 Objective-C,Objective-C会返回 Array 的地址给 Swift 代码,当 iteration loop 返回的 array 时发生崩溃。可能原因:Swift ARC 内存优化释放指针引起的崩溃。
98 |
99 | 3) [用于 SwiftSyntax 的新 Swift 解析器](https://forums.swift.org/t/a-new-swift-parser-for-swiftsyntax/59813 "用于 SwiftSyntax 的新 Swift 解析器")
100 |
101 | 内容概括:SwiftSyntax 是一个 Swift Package,它可以解析 Swift 代码成一个树状的语义,可以对树进行操控也可以将树状的语义变回 Swift 代码。目前 SwiftSyntaxParser 是一个基于 C++ 库并且 Swift compiler 非常依赖于 C++ 库。
102 | 项目目标:完全取代 Swift parser 对 C++ 库的依赖
103 |
104 | 4) 围绕 [SE-0370 pointer family initialization improvements and better buffer slice](https://forums.swift.org/t/pitch-pointer-family-initialization-improvements-better-buffer-slices/55689 "SE-0370") 展开的讨论
105 |
106 | 5) [提议:标准库的稳定排序](https://forums.swift.org/t/pitch-document-sorting-as-stable/59880 "提议:标准库的稳定排序")
107 |
108 | 稳定排序是:在比较相同元素的情况下保持输入的顺序:例子:
109 |
110 | ```Swift
111 | var roster = [
112 | Player(first: "Sam", last: "Coffey"),
113 | Player(first: "Ashley", last: "Hatch"),
114 | Player(first: "Kristie", last: "Mewis"),
115 | Player(first: "Ashley", last: "Sanchez"),
116 | Player(first: "Sophia", last: "Smith"),
117 | ]
118 |
119 | roster.sort(by: { $0.first < $1.first })
120 | // roster == [
121 | // Player(first: "Ashley", last: "Hatch"),
122 | // Player(first: "Ashley", last: "Sanchez"),
123 | // Player(first: "Kristie", last: "Mewis"),
124 | // Player(first: "Sam", last: "Coffey"),
125 | // Player(first: "Sophia", last: "Smith"),
126 | // ]
127 | ```
128 |
129 | 从例子中看出有两个一样的 first: "Ashley", 由于输入 "Hatch" 在 "Sanchez" 之前, 稳定排序之后顺序不变。
130 |
131 | 6) [访问变量时只运行一次函数的最佳方法](https://www.reddit.com/r/swift/comments/wwgblk/best_way_to_run_a_function_only_once_while/ "访问变量时只运行一次函数的最佳方法")
132 |
133 | 7) [确保 viewDidLoad 中的嵌套闭包在函数运行之前完成的最佳方法](https://www.reddit.com/r/swift/comments/wvpxmn/what_is_the_best_way_to_make_sure_a_nested/ "确保 viewDidLoad 中的嵌套闭包在函数运行之前完成的最佳方法")
134 |
135 | ## 推荐博文
136 |
137 | [在 iOS 16 中使用 SwiftUI Charts 创建折线图](https://swdevnotes.com/swift/2022/create-a-line-chart-with-swiftui-charts-in-ios-16/ "在 iOS 16 中使用 SwiftUI Charts 创建折线图")
138 |
139 | **摘要:** Apple 在 `WWWDC 2022` 上推出了 `SwiftUI Charts`,在 `SwiftUI` 视图中实现图表功能变得非常容易。如下图:
140 |
141 | 
142 |
143 | [在 iOS 16 中使用 SwiftUI Charts 自定义折线图](https://swdevnotes.com/swift/2022/customise-a-line-chart-with-swiftui-charts-in-ios-16/ "在 iOS 16 中使用 SwiftUI Charts 自定义折线图")
144 |
145 | **摘要:** iOS 16 中引入的 SwiftUI Charts,可以快速的实现各种统计图,通过图表直观的呈现数据。本文介绍了几种自定义的折线统计图。
146 |
147 | [如何在 SwiftUI 中创建条形图](https://swdevnotes.com/swift/2021/how-to-create-bar-chart-swiftui/ "如何在 SwiftUI 中创建条形图")
148 |
149 | **摘要:** 本文展示了如何创建一个垂直条形图,其中 Y 轴表示每个类型的值。如下图:
150 |
151 | 
152 |
153 | [如何在 SwiftUI 中创建水平条形图](https://swdevnotes.com/swift/2021/horizontal-bar-chart-in-swiftui/ "货拉拉 iOS 司机端线程治理总结")
154 |
155 | **摘要:** 根据 UI 设计以及交互需求,有时候统计图需要调整 X 和 Y 轴。本文主要介绍了如何创建水平的条形图,如下图:
156 |
157 | 
158 |
159 | [使用 SwiftUI 的 Eager Grids](https://github.com/SwiftCommunityRes/article-ios/blob/main/resource/%E4%BD%BF%E7%94%A8%20SwiftUI%20%E7%9A%84%20Eager%20Grids.md "使用 SwiftUI 的 Eager Grids")
160 |
161 | **摘要:** 本篇文章主要讲解如何使用 `Eager Grids` 绘制网格视图,其中讲解了十几种网格的实现方法,并详细介绍了网格的实现原理。
162 |
163 | ## 关于我们
164 |
165 | **Swift社区**是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 **Swift实战**、**SwiftUl**、**Swift基础**为核心的技术内容,也整理收集优秀的学习资料。
166 |
167 | 欢迎关注公众号:Swift社区,后台点击进群,可以进入我们社区的交流讨论群。希望我们Swift社区是大家在网络空间中的另一份共同的归属。
168 |
169 |
170 |
171 | 特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。
172 |
--------------------------------------------------------------------------------
/SwiftWeekly/SwiftWeekly_13.md:
--------------------------------------------------------------------------------
1 | ## 前言
2 |
3 | **本期是 Swift 编辑组自主整理周报的第四期**,每个模块还在调整磨合期。各位读者如果有好的提议,欢迎在文末留言。
4 |
5 | Swift 周报在 [GitHub 开源](https://github.com/SwiftCommunityRes/SwiftWeekly "SwiftWeekly"),欢迎提交 issue,投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。
6 |
7 | 昔孔子登泰山而小天下, 今诸君阅**Swift社区**皆足矣。请君浅读,与君共勉!👊👊👊
8 |
9 | > **周报精选**
10 | >
11 | > 新闻和社区:iPhone14 Pro 刘海变“灵动岛”
12 | >
13 | > 提案:大量提案审核结果已发布
14 | >
15 | > Swift 论坛:论坛内容丰富,欢迎参与讨论
16 | >
17 | > 推荐博文:增加 App 排名的 ASO 小技巧
18 |
19 | ## 新闻和社区
20 |
21 | ### iPhone14 Pro 刘海变“灵动岛”
22 |
23 | iPhone14 Pro 来了,从外观看两个亮点,第一是新配色 #iPhone14Pro 灭霸紫# 好看吗?第二是刘海变成了药丸,不是感叹号,但是带来了 #iPhone14Pro 灵动岛#,和显示动画合为一体。
24 |
25 | 本次发布会,iphone14pro 刘海依旧,但刘海减少 30% 变更为“药丸”,并引入灵动岛设计,通过刘海变换多种交互UI。视网膜 XDR2000 尼特峰值,实现息屏显示。使用新的 A16 4nm 芯片,搭载 4800 像素主摄像头,比 iPhone 13 Pro 大了 65%,新增配“灭霸紫”配色。
26 |
27 | 9月8日凌晨,苹果秋季发布会推出 iPhone14 系列产品,其中最大亮点为 iPhone14pro 系列新增正面设计“灵动岛”。正面摄像头有一个较小的切口,在不同状态下挖孔形态不同,支持第三方应用。iPhone14 系列售价:iPhone14 5999元起,iPhone14plus 6999元起,iPhone14pro 7999元起,iPhone 14pro max 8999元起。9 月 9 日开始预售,9 月 16 日正式发售。
28 |
29 | 
30 |
31 | ### 库克:苹果将捐款支持四川地震灾区救援和重建工作
32 |
33 | 9 月 7 日消息,苹果 CEO 蒂姆库克的认证微博发布消息称:“我们心系所有受地震影响的四川民众和社区。苹果将捐款支持救援和重建工作。”
34 |
35 | 
36 |
37 | 此前,小米、宁德时代、阿里巴巴、网易、字节跳动、联想、辛选集团、比亚迪、拼多多、理想汽车等都宣布向四川地震灾区进行捐赠。
38 |
39 | ### 苹果为老款 iPhone / iPad / iPod 发布 iOS 12.5.6 更新,修复严重漏洞
40 |
41 | IT之家 9 月 1 日消息,苹果今日为老款 iPhone 发布了 iOS 12.5.6(内部版本号:16H71)更新,针对无法更新到 iOS 15 的设备进行了安全更新和错误修复。
42 |
43 | 这是自 2021 年 9 月以来苹果对 iOS 12 的首次更新,当时苹果修复了一个问题,该问题使恶意制作的 PDF、Web 内容和 App 能够执行代码。最新更新解决了自上次更新以来已在 iOS 15 中修补的漏洞。
44 |
45 | IT之家了解到,苹果会针对无法更新到 iOS 12 之后的旧 iPhone、iPad 和 iPod 提供定期更新。这些更新不会提供任何重大的功能更改或 UI 改进,但会针对旧设备可能容易受到的已知攻击提供保护。
46 |
47 | 苹果安全更新网站声明如下:
48 |
49 | 一位匿名研究人员提交的 CVE-2022-32893。
50 |
51 | 更新适用于:iPhone 5s、iPhone 6、iPhone 6 Plus、iPad Air、iPad mini 2、iPad mini 3 和 iPod touch(第 6 代)
52 |
53 | 影响:恶意制作的 Web 内容可能会执行任意代码。有报告称此问题可能已被积极利用。
54 |
55 | 描述:已通过改进边界检查解决越界写入问题。(来源: IT之家)
56 |
57 | 
58 |
59 | ### 苹果 iOS 16 更新,天气 App 新功能盘点
60 |
61 | IT之家 8 月 31 日消息,苹果在 iOS 16 中对天气应用进行了一些改变,包括新的通知类型,并增加了一些信息,从湿度、温度到能见度全方位为你提供服务。
62 |
63 | 此外,新版天气 App 中的许多新功能都融入了苹果此前收购的 Dark Sky 内容。
64 |
65 | 天气应用程序的整体设计没有重大更新,但苹果提供了更多信息。长期以来,天气应用一直都有一些小模块,从而向你显示各种信息,包括 10 天内预报、每日气温、空气质量、降水、紫外线指数、日落 / 日出时间、风、湿度、感官温度、能见度和压力等等,现在你可以点击进入这些模块中的任何一个来获取更多信息,还支持快速切换。
66 |
67 | 温度部分展示了全天的温度曲线图,包括最高和最低。这应该可以解决 iOS 15 天气应用中存在的一个问题,从而不会再有用户抱怨不清楚气温何时才是每日最低点。此外,这一部分还提供了天气状况的文本概述。在 10 天的天气预报中,你可以点击任何一天查看每日温度范围的图表,还有一个选项可以查看更大的彩色温度地图。
68 |
69 | 空气质量这块展示了您所在地区当前空气状况的图表,以及当前状况和主要污染物对健康影响的附加信息。此外,你还可以看到更大的空气质量地图,预计国内同样是由“和风天气”提供信息。
70 |
71 | 新的“降水”类似于之前版本的降水信息,显示了风暴将袭击的位置地图,还可以放大显示 12 小时降雨预报,还有一个界面显示了过去 24 小时内的降水总量详情,以及在什么时间下了多少雨、雨夹雪或雪。
72 |
73 | 感官温度提供了第二个温度图表,结合温度、湿度,风等一些其他因素,你可以更好地了解周围环境温度变化。
74 |
75 | 紫外线指数显示当前的紫外线等级和白天的最高紫外线水平。同时,它还会提供一段介绍,例如建议防晒等级。
76 |
77 | “日落和日出”可以让你知道日出或日落的时间,同时它还包括每月日出和日落的平均值和总日光的读数。
78 |
79 | “风”主要是提供每天的风速摘要,以及全天的风速、风向图表。
80 |
81 | 湿度部分显示了全天湿度的图表,分为六个小时的增量。它还提供平均湿度和露点等信息。
82 |
83 | “能见度”可提供全天的能见度范围,并提供每日摘要。
84 |
85 | “压强”显示了当前的压强、全天压强,以及压强是上升还是下降的读数。
86 |
87 | “极端天气警报”和之前一样,会显示重大的暴雨、洪水、飓风、热浪、龙卷风等其他灾害警告,预计国内还是和风天气提供信息。
88 |
89 | “天气锁屏”虽然不是天气应用程序的一部分,但在 iOS 16 中有一个专门的天气锁屏。如果是晴天,你会看到太阳,如果是雨天,你会看到下雨。
90 |
91 | 还有许多不同的天气小部件,你可以添加到任何锁屏中,还有一个更大的读数与温度,当前条件,高 / 低随着个别空气质量,紫外线指数,和温度选项。
92 |
93 | “iPad 天气”,随着 iOS 16/ iPadOS 16 更新,终于有了适用于 iPad 的天气应用,相比 iPhone 版本可以更好地适应 iPad 的大显示屏。
94 |
95 | 总之,iOS 16 更新了好多新奇的功能哦,小伙伴快去试试吧。(来源: IT之家)
96 |
97 | ## 提案
98 |
99 | ### 通过的提案
100 |
101 | [SE-0370](https://github.com/apple/swift-evolution/blob/main/proposals/0370-pointer-family-initialization-improvements.md "SE-0370") **改进指针系列初始化和缓冲区** 提案已通过。该提案已在[十二期周报](https://mp.weixin.qq.com/s/IXP8PNT4aoCnyB-V2qMY_Q)正在审查的提案模块做了详细介绍。
102 |
103 | [SE-0365](https://github.com/apple/swift-evolution/blob/main/proposals/0365-implicit-self-weak-capture.md "SE-0365") **增加对协议 CustomDebugStringConvertible 到 AnyKeyPath 的一致性** 提案已通过。该提案已在[十二期周报](https://mp.weixin.qq.com/s/IXP8PNT4aoCnyB-V2qMY_Q)正在审查的提案模块做了详细介绍。
104 |
105 | [SE-0368](https://github.com/apple/swift-evolution/blob/main/proposals/0368-staticbigint.md "SE-0368") **StaticBigInt** 提案已通过。该提案已在[十一期周报](https://mp.weixin.qq.com/s/i5a-jhRRdf36KUNRoMX_8w)正在审查的提案模块做了详细介绍。
106 |
107 | ### 拒绝的提案
108 |
109 | [SE-0371](https://github.com/apple/swift-evolution/blob/main/proposals/0371-isolated-synchronous-deinit.md "SE-0371") **Isolated synchronous deinit** 被拒绝,重新修订。该提案已在[十二期周报](https://mp.weixin.qq.com/s/IXP8PNT4aoCnyB-V2qMY_Q)正在审查的提案模块做了详细介绍。
110 |
111 | [SE-0366](https://github.com/apple/swift-evolution/blob/main/proposals/0366-move-function.md "SE-0366") **代码上下文新增敏感关键字 move** 被拒绝,重新修订。该提案已在[十一期周报](https://mp.weixin.qq.com/s/i5a-jhRRdf36KUNRoMX_8w)正在审查的提案模块做了详细介绍。
112 |
113 | ### 正在审查的提案
114 |
115 | [SE-0372](https://github.com/apple/swift-evolution/blob/main/proposals/0372-document-sorting-as-stable.md "SE-0372") **更新稳定排序文档** 提案正在审查。
116 |
117 | Swift 的排序算法在 Swift 5 之前已经更改为稳定排序,但是文档一直没有更新。本提案致力于更新稳定的排序算法文档,方便开发者使用。
118 |
119 |
120 | ## Swift论坛
121 | 1) 讨论 [Automatic 类型的一致性](https://forums.swift.org/t/automatic-type-conformance/60111 "Automatic 类型的一致性")
122 |
123 | 出发点:
124 |
125 | ```Swift
126 | private func cachedImage(for path: String?) -> AnyPublisher {
127 | guard let path = path else {
128 | return Just(nil)
129 | .eraseToAnyPublisher()
130 | }
131 | if let image = imageCache.object(forKey: NSString(string: path)) {
132 | return Just(image)
133 | .eraseToAnyPublisher()
134 | }
135 | return image(for: path)
136 | .handleEvents(receiveOutput: { [weak imageCache] (image) in
137 | imageCache?.setObject(image, forKey: NSString(string: path))
138 | })
139 | .eraseToAnyPublisher()
140 | }
141 | ```
142 |
143 | ```Swift
144 | .eraseToAnyPublisher()
145 | ```
146 |
147 | 被用到了很多次
148 |
149 | 把它提出来,写一个 Just 的 extension
150 |
151 | ```Swift
152 | extension Just: TypeConvertable {
153 | var convertable: AnyPublisher