Swift 周报 第二十期

news2024/11/18 12:40:40

前言

本期是 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 语言的发展贡献自己的力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工厂设备管理难点与解决方案

工厂设备管理中经常会遇到哪些问题&#xff1f; 设备是生产力的重要组成部分&#xff0c;是工厂从事生产经营的重要工具&#xff0c;生产设备无论从企业资产的占有率&#xff0c;还是从管理工作的内容上都占据相当大的比重&#xff0c;管好、用好设备&#xff0c;提高设备管理…

JS 之 对象、继承

目录 JS对象 1.通过new Object()创建 2.工厂模式 3.构造函数模式 4.原型模式 5.组合使用构造函数与原型对象 6.动态原型模式 7. 寄生构造函数模式 8.稳妥构造函数模式 原型对象 原型链 继承 1.原型链继承 2.借用构造函数&#xff08;经典继承 | 伪造函数&#xff…

CTF之密码学题目-classical coding

CTF系列文章 第一篇 CTF之密码学题目-classical && coding 文章目录CTF系列文章前言一、题目是什么&#xff1f;二、解题步骤1.下载文件&#xff0c;解压2.解码Unicode3.ASCII码解码4.BrainFunk解码5.莫斯码解码6.字频解密总结前言 在CTF比赛中&#xff0c;有关密码学…

Memtiter-benchmark源码解析2--shared_connection

shard_connection.h class shad_connection private members Line 161 行 bufferevent* m_bev&#xff1b;重要的bufferevent_event important methods setup_event shard_connection.cpp bufferevent_setcb 设置了 m_bev 的读事件的函数回调&#xff0c;没有设置写事件的函…

如何策划一场银行校招线上笔试?

策划一场银行校园招聘线上笔试&#xff0c;只需要4步。 牛客基于服务的上千家企业现状发现&#xff0c;银行业大多数企业在校园招聘的笔试环节会面临这些核心问题&#xff1a; 缺乏出题专业度&#xff1a;大多数企业出题者为业务部门员工&#xff0c;技能水平不一&#xff0c…

Educational Codeforces Round 97 (Rated for Div. 2) D. Minimal Height Tree

Problem - D - Codeforces 翻译&#xff1a; Monocarp有一棵树&#xff0c;它由&#x1d45b;个顶点组成&#xff0c;并以顶点1为根。他决定研究BFS(宽度优先搜索)&#xff0c;所以他在他的树上运行BFS&#xff0c;从根开始。BFS可以用下面的伪代码描述: A [] #处理顶点的顺序…

欧几里得空间

文章目录1 欧几里得范数2 距离3 标准内积4 柯西-施瓦茨不等式5 正交6 叉乘7 平行四边形法则8 欧几里得运动线性空间里最重要的就是欧几里得空间了&#xff0c;这是线性代数学习绕不过去的槛。欧几里得空间&#xff0c;学习起来我觉得吧&#xff0c;主要是三个点&#xff1a;内积…

Golang面试宝典——Go语言实现排序算法之快速排序

关于Golang面试宝典 最近几年&#xff0c;Go的热度持续飙升&#xff0c;国内外很多大公司都在大规模的使用Go。Google是Go语言诞生的地方&#xff0c;其他公司如Facebook、腾讯、阿里、字节跳动、百度、京东、小米等都在拥抱和转向Go。Go语言的开源项目也非常多&#xff0c;如…

无人驾驶(四)---远程桌面控制工具: NoMachine踩坑记录

NoMachine for mac是一款免费的远程桌面访问工具&#xff0c;这款软件的连接到远程桌面后延迟可以非常低&#xff0c;NX协议在高延迟低带宽的链路上提供了近乎本地速度的响应能力&#xff0c;打破空间和时间的障碍&#xff0c;让您的桌面环游世界。 1.环境配置 服务端&#x…

西门子PLC各类通信协议差异对比

西门子PLC有4大类&#xff0c;几十个型号类型&#xff0c;PLC不同所支持的通讯协议也不相同。 S7-200系列支持的协议有&#xff1a;PPI、MPI、PROFIBUS、以太网、S7协议、AS-INTERFACE、USS、MODBUS、自由口。 S7-300\400系列支持的协议有&#xff1a;MPI、PROFIBUS、ETHERNE…

陌陌综合案例

注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kafka Hbase Hive Flume等…

【python3】10.python高阶内容:装饰器

10.python高阶内容&#xff1a;装饰器 2022.12.28 装饰器装饰器(Decorators)是 Python 的一个重要部分。简单地说&#xff1a;他们是修改其他函数的功能的函数。参数可以是函数&#xff0c;返回值也可以是函数。 10.1 形式 def decorator(fn):def wrapper(name):print(name&…

【Linux进程】进程的基本概念,fork的使用,各种状态的含义,孤儿和僵尸进程的含义

目录 1.进程的基本概念 2.描述进程-PCB 3.fork创建子进程 4.各种状态对应的含义及进程大概的运行原理 5.僵尸进程 ​6.孤儿进程 7.进程的优先级 1.进程的基本概念 2.描述进程-PCB PCB概念:进程信息被放在一个叫做进程控制块的数据结构中&#xff0c;可以理解为进程属性的集…

ChatGPT注册教程

ChatGPT是最近很火的AI智能对话聊天软件。我们是能够去用来进行更加自由的智能内容讨论和聊天。有的小伙伴还不知道怎么注册。 官方地址&#xff1a;chat.openai.com/chat 注册步骤 1、进入官网后&#xff0c;点击注册按钮。 2、点击创建账号。 3、输入自己的邮箱账号。 4、…

整合Kafka

Main Concepts 一些服务器形成了存储层&#xff0c;被称为broker&#xff0c;其他服务器运行kafka连接去不断地导入和导出数据作为事件流&#xff0c;将kafka和关系型数据库等存在的系统集成。 Servers: Kafka is run as a cluster of one or more servers that can span mult…

高手不用Redis内存数据库一

不是说Redis不好&#xff0c;不用Redis用别的(比如:Memcached 2、VoltDB 3、MongoDB 4、Hazelcast 5、Aerospike) No! No! No!!! Redis 很好&#xff0c;我不拦着您用…… 而是说&#xff0c;我们的水平更高了以后&#xff0c;您一定会感受到 内存数据库 不够用、不够灵活、不…

JavaScript基础篇2之日期时间函数

一、计算机中时间字母表示的预知识储备&#xff1a; G&#xff08;age&#xff0c;时代年龄等意思&#xff09;&#xff1a;时代标志&#xff0c;如AD&#xff08;Anno Domini公元&#xff09;、BC&#xff08;Before Christ公元前&#xff09;。 y&#xff08;year&#xff…

zabbix安装使用

1.1 Zabbix概述 Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制&#xff0c;允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据&#xff0c;Zabbix提供了出色的报告和数据可视化功能。…

基于python的turtle实现圣诞树的绘制

文章目录一、前言二、基于turtle实现绘制圣诞树三、效果展示四、实现步骤代码实现分步骤1. 导入库2. 配置圣诞树高度等信息3. 定义函数get_color()可获取随机颜色4. 定义函数snow() 绘制一朵雪花5. 定义函数name()可随机写一些文字6. 定义函数koc() 绘制星星7.定义函数tree()绘…

Qt中调用thrift

thrift是一个Apache公司开源的一款RPC&#xff08;Remote Procedure Call&#xff09;框架&#xff0c;让不同语言构建的服务可以做到远程调用无缝对接。 thrift库分两部分&#xff1a; libthrift - 核心库文件&#xff0c;需要依赖OpenSSL、boost libthriftnb - 包含thrift非阻…