Swift 周报 第二十期

前言

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

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

在这个来去匆匆风云变幻的季节,Swift社区更像一个密不透风的茧,为的只是有朝一日能够破茧成蝶。👊👊👊

周报精选

新闻和社区:部分 iPhone 14 Pro / Max 被爆开机闪现水平线

提案:DiscardingTaskGroups 提案正在审查

Swift 论坛:讨论修改 SE-0368 以删除前缀 + 运算符

推荐博文:SwiftUI 的优势、劣势和缺陷

话题讨论:

疫情放开,你处于什么阶段

新闻和社区

部分 iPhone 14 Pro / Max 被爆开机闪现水平线

一些 iPhone 14 Pro 和 iPhone 14 Pro Max 用户报告说,当设备被打开时,iPhone 显示屏上闪烁着水平线,但没有明确的原因或如何修复它。

在 Reddit 的主题帖子中,数十名 iPhone 14 Pro 用户报告说,当设备被打开时,一条或多条绿色和黄色的线条可能会在屏幕上闪烁,几秒钟后消失。根据这些用户的说法,苹果支持部门已经通知他们,该问题不是硬件缺陷造成的,而是 iOS 16 的错误 Bug。

iOS 16.2 不能升级 Home 应用架构

苹果已取消 iOS 16.2 升级到新 Home 家庭架构的选项,iOS 16.2 和 macOS Ventura 13.1 的主要新功能之一是能够升级到新的 Home 家庭应用架构。虽然苹果没有分享具体的变化细节,但表示,该升级为 HomeKit 配件提供了“更好的性能和可靠性”。

AppleWatch 或可无创测血压

Apple Watch 无创测血压功能即将到来,苹果正积极积累相关技术。IT 之家 12 月 23 日消息,知情人士在今年 4 月透露,苹果计划在 Apple Watch 中添加血压监测功能,但由于遇到障碍,该项技术预计最早要到 2024 年才能推出。苹果目前也在积极地积累技术支持,美国商标和专利局(USPTO)公示了一项新的苹果专利(专利号 US 20220400959),涉及获取和分析无创血压测量数据的系统和方法。

iPhone15 系列将继续采用高通5G基带芯片

苹果 iPhone 15 系列将采用高通骁龙 X70 5G 基带芯,根据 DigiTimes 报道,苹果 iPhone 15 系列将继续采用高通 5G 调制解调器(基带芯片),因为苹果公司仍在继续开发自有的 5G 定制芯片。

提案

正在审查的提案

SE-0381 DiscardingTaskGroups 提案正在审查。

该提案建议为 TaskGroupThrowingTaskGroup 引入一个新的布尔参数 discardResults。此参数将控制 TaskGroup 是保留其已完成子任务的结果,然后确定是传递给 next(),还是立即丢弃。

SE-0382 Expression Macros 提案正在审查。

Expression Macros 提供了一种用新型表达式扩展 Swift 的方法,这些表达式可以对其参数执行任意语法转换以生成新代码。 Expression Macros 使得用以前只有引入新的语言特性才能实现的方式扩展 Swift 成为可能,帮助开发人员构建更具表现力的库并消除无关的样板。

Swift论坛

  1. Swift to C++ 将 Swift 参数标签合并到生成的 C++ 函数名中

  2. 讨论如何测试发送动作的长时间运行效果?

  3. 议案 [Pitch] 结果构建器范围内的不合格查找

介绍:

结果构建器为定义声明式 DSL 提供了基础——特定领域的语言提供了在特定领域工作的定制语法,例如生成图表或文本处理。 利用结果构建器的复杂 DSL API 遇到了设计可扩展性和类型检查性能方面的问题,引入了需要解决的关键挑战。

扩展结果构建器以支持在其主体内进行范围内的非限定名称查找,即特定于构建器类型的范围内名称间距,将启用新的 API 模式,显着降低类型检查的复杂性,同时改善调用站点的美感。

  1. 议案修改 SE-0368 以删除前缀 + 运算符

内容:SE-0368包括对 StaticBigInt 的以下操作:

/// Returns the given value unchanged.
public static prefix func + (_ rhs: Self) -> Self

这被包括在内,以便前缀 + 可以作为文字前缀包含在上下文中,在这些上下文中,值需要是 StaticBigInt 类型,而不是另一种类型的文字,以便与 - 对称:

let signs: [StaticBigInt] = [-1, 0, +1]

事实证明,这是一个源代码的突破性变化,因为有如下示例:

let a: Int = 7
let b = +1     // Inferred as `StaticBigInt` because concrete `+` beats
               // the generic one on `AdditiveArithmetic`
let c = a + b  // Error: Cannot convert `b` from `StaticBigInt` to `Int`

之前,b 被赋予了 Int 类型,这个例子编译正确。建议修改 SE-0368 以删除此运算符。 这对于想要使用 StaticBigInt 值的代码来说是一个小小的不便,但是不存在这样的代码,因为 5.7 中不存在该类型。

这样的代码可以省略前导 + 作为解决方法。

一旦解决了源中断问题,我们就可以调查其他选项以在空闲时恢复所需的语法。

  1. 讨论 ArgumentParser 包出现 no such file 错误

  2. 讨论如何打印 HTTPS URL 参数和正文

  3. 提议 <Success, Failure> Guard Evaluation 会更好

内容:

SE-0235 中将结果类型引入标准语言是我在构建库时最喜欢的功能之一。 当返回的 Result 用户想要评估时,通常看起来有点像这样:

let result:  Result<Data, MyCustomError> = getResult()

switch result {
case .success(let data):
  // Do something with the data here
case .failure(let error):
  // Handle error
}

这对大多数情况都很好。 然而,如果我们需要级联多个结果,它会变得有点难看。

例如:

let firstResult:  Result<Data, MyCustomError> = getFirstResult()

switch firstResult {
case .success(let data):
  let secondResult: Result<Data, MyCustomError> = getSecondResult(using: data)
  switch secondResult {
  case .success(let secondData):
    // Do something with secondData
  case .failure(let secondError):
    // Handle secondError
  } 
case .failure(let firstError):
  // Handle firstError
}

如上所述,嵌套切换变得有点沉重。 这常常让我想起嵌套的 if 语句,作为一个“从不嵌套”的人,我通常会在这里求助于 guard 关键字。 我认为 guard 关键字对于评估 Result 类型也非常有用,但是因为它现在有效,但 gaurd 关键字对于 Result type 用起来有问题。

let firstResult:  Result<Data, MyCustomError> = getFirstResult()
guard case .success(let data) = firstResult else {
  // Handle first error - But no reference to firstError! 
  return
}
 
let secondResult: Result<Data, MyCustomError> = getSecondResult(using: data)
guard case .success(let secondData) = secondResult else {
  // Handle second error - But no reference to secondError! 
  return
} 

正如评论所暗示的那样,我没有引用 guard 语句的 else 部分中的错误类型。 据我所知,没有办法使用这种语法并访问返回的错误类型。

也许有一些方法可以通过扩展 guard 语句或更新 Result 类型来实现此功能?

所以这就是为什么我要提出这个建议。我不是确定能百分百修复。甚至不确定这是对语言的有用更改还是其他 Swift 用户想要的东西。让我们在这里讨论一下!

  1. 讨论 Swift 是否允许重载属性

话题讨论

疫情放开,你处于什么阶段

欢迎在文末留言参与讨论。

关于我们

Swift社区是由 Swift 爱好者共同维护的公益组织,我们会分享以 Swift实战SwiftUlSwift基础为核心的技术内容,也整理收集优秀的学习资料。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网罗开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值