Swift 周报 第四十一期

在这里插入图片描述

在这里插入图片描述

文章目录

    • 前言
    • 新闻和社区
      • 2024 年 Swift Student Challenge 公布
      • 现推出超过 30 个新的开发者活动
    • 提案
      • 正在审查的提案
    • Swift论坛
    • 话题讨论
    • 推荐博文
    • 关于我们

前言

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

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

生活的富足并非完美无缺,适当的缺憾更能感触幸福。Swift社区邀你一起,保持积极向上的心!👊👊👊

周报精选

新闻和社区:现推出超过 30 个新的开发者活动

提案:全局变量的严格并发性

Swift 论坛:Swift 6 语言模式的进展

推荐博文:Swift 中的崩溃回溯

话题讨论:

如果公司在市中心,你会选择那种方式?

上期话题结果

根据投票结果分析,极兔速递的 IPO 在受众中引起了相当的关注。顺丰和京东物流依然是物流行业备受看好的龙头企业,分别占据相当大的比例。菜鸟虽然有一定支持,但在此次投票中表现相对较弱。

新闻和社区

2024 年 Swift Student Challenge 公布

Apple 很自豪能够支持和激励下一代学生开发者、创作者和企业家。挑战赛为数以千计的学生提供了机会,让他们可以展现自身的创造力和编程能力,并培养可以在职业生涯和更多地方运用的实际技能。从帮助同伴找到合适的心理健康资源,到发现在校园内支持可持续发展工作的方式,Swift Student Challenge 参赛者将发挥他们的创造力,通过开发 App 来解决他们关注的问题。

我们发布了新的编程资源、与社区合作伙伴积极合作,而且比往年更早公布了挑战赛,以便学生们能深入研究 Swift 和整个开发过程,同时教育工作者也能抢先一步为他们提供支持。

申请将在 2024 年 2 月开放三周。

2024 年挑战赛新增了一项机制,我们将在 350 名获奖者中选出 50 名杰出获奖者,并对这些提交了优秀作品的杰出获奖者予以表彰,邀请他们明年夏天前往位于库比提诺的 Apple 园区度过难忘的三天。

现推出超过 30 个新的开发者活动

2023 年 11 月 7 日

准备好提升你的 App 或游戏功能了吗?在整个 11 月和 12 月,欢迎参加面向全球开发者量身打造的一系列面对面或在线举办的全新实验室、咨询和讲座等活动。

你将能探索:

App Store 活动:了解关于探索、互动、App 内活动、自定产品页面、订阅推荐做法等众多精彩内容。
Apple Vision Pro 开发者实验室:申请参加位于库比提诺、伦敦、慕尼黑、纽约、上海、新加坡、悉尼或东京的实验室。

Apple Vision Pro 活动:了解如何为 visionOS 设计和构建全新的 App 和游戏世界。

设计和技术咨询:报名获取关于 App 设计、技术实施等方面的一对一指导。

探索在多个时区以多种语言进行的活动。

提案

正在审查的提案

SE-0412 全局变量的严格并发性 提案正在审查。

该提案定义了在不产生数据竞争的情况下使用全局变量的选项。在此提案中,全局变量涵盖任何静态持续时间的存储:在全局范围声明的 let 和存储 var,或者作为静态成员变量。

Swift论坛

  1. 讨论Swift 6 语言模式的进展

自上次更新为 Swift 6 语言模式 94 制定设计优先事项以来,该项目一直在稳步推进,朝着这个下一个里程碑迈进。然而,先前提出的一些目标包括尚处于开放式研究阶段的问题。在 Swift 6 的工作进展的同时,语言指导组正在将 Swift 6 剩余变更的重点缩小到默认情况下的数据竞争安全。

数据竞争安全的准备情况

在严格的并发检查下,Sendable 检查模型中仍存在许多错误和漏洞,允许数据竞争。同样重要的是,严格的并发检查目前会发出大量错误报告数据竞争,使得完整的检查难以进行编程。

只有当语言指导组确定编程模型是有效和可用的时,Swift 6 语言模式才会被宣布准备就绪。完成 Swift 6 语言模式的数据竞争安全所需的剩余语言工作将分为两类:

  1. 填补严格并发模型中的所有漏洞,以便静态地或在静态安全无法证明的情况下动态地诊断数据竞争。
  2. 缓解已被证明是安全的模式对数据竞争的虚假报告。

Swift 5.10 包含了许多与 actor 隔离和 Sendable 检查有关的重大错误修复。此外,以下语言更改目前正在进行设计和实施,以接受 Swift 演进审查过程:

  1. SE-0411: 孤立的默认值表达式 23
  2. 为方法和键路径文字推断 @Sendable 18
  3. 全局和静态变量的严格并发检查 12
  4. 改进对闭包 actor 隔离的控制 16
  5. 通过孤立值区域解除对非 @Sendable 值的限制 15

这些变化共同填补了严格并发检查中的剩余主要漏洞,并通过引入更多的 @Sendable 推断和启用安全的方式在隔离边界传递非 @Sendable 值,提高了严格并发检查的可用性。语言指导组承认,并发领域的其他语言更改也很重要,但以上更改对于定义 Swift 6 语言模式是必要的。其他并发特性是附加的,可以独立探索。

Swift 6 迁移

即将推出的功能 16 对于迁移到 Swift 6 语言模式至关重要:可以逐个启用单个即将推出的功能,以逐步将代码库移向 Swift 6,然后再采用完整的语言模式。有许多先前接受的即将推出的功能将在 Swift 6 中默认启用:

  1. SE-0274: 简洁的魔术文件名 93 (ConciseMagicFile)
  2. SE-0286: 用于尾随闭包的正向扫描匹配 55 (ForwardTrailingClosures)
  3. SE-0337: 增量迁移到并发检查 18 (StrictConcurrency)
  4. SE-0354: 正则表达式文字 23 (BareSlashRegexLiterals)
  5. SE-0383: 弃用 @UIApplicationMain@NSApplicationMain 70 (DeprecateApplicationMain)
  6. SE-0384: 导入前向声明的 Objective-C 接口和协议 31 (ImportObjcForwardDeclarations)
  7. SE-0401: 由属性包装器引起的去除 Actor 隔离推断 22 (DisableOutwardActorInference)
  8. SE-0409: 导入声明上的访问级别修饰符 55 (InternalImportsByDefault)

语言指导组已决定,先前接受的即将推出的功能 ExistentialAny 将不会在 Swift 6 中默认启用。SE-0335: 引入存在的任何 33 引入了 any 关键字以识别存在类型。该提案还规定,“裸” 协议名称将不再被允许用作类型——它们必须使用任何或一些,视情况而定——在即将推出的功能标志 ExistentialAny 下。鉴于关于向一致使用存在的任何语言迁移的担忧,以及期望会出现可能影响该迁移最终结果的其他语言改进,语言指导组正在将 SE-0335 中的源不兼容更改推迟到将来的语言修订中。

其他 Swift 6 可能包括源不兼容更改的演进提案,语言指导组将在评估这类提案是否相对于源不兼容的成本对语言的价值时逐个进行评估。例如,足够有价值的更改可能包括为完成主要功能(例如类型化抛出)而必需的轻微类型推断更改,或者为了实现数据竞争安全而进行的语义更改。

一旦为 Swift 6 准备好所有即将推出的功能,语言指导组将提供一个迁移指南,建议以一种最佳路径逐步启用项目中的严格并发检查,并提供有关如何处理某些常见代码模式中的严格并发违规的实际指导。社区对这些指南的反馈对于评估 Swift 6 迁移是至关重要的。

  1. 修订SE-0192:处理未来的枚举案例

自核心团队宣布对 SE-0192(处理未来枚举案例,又称为非尽事枚举)实施修改以来已经过去了五年。

换句话说,专门用于非尽事枚举的要求,即添加 @unknown 默认情况,以处理未来的枚举案例,已从 “Swift 4 中的警告/Swift 5 中的错误” 降级为 “Swift 4 中的运行时陷阱/Swift 5 中的警告”,以减轻源代码兼容性的影响。

直到今天,缺乏 @unknown default 情况仍然是一个警告而不是错误;忽略该警告意味着如果遇到未来的枚举案例,则会发生运行时陷阱。

语言指导组在考虑到 Swift 6 语言模式的计划时讨论了 SE-0192 的当前状态,并且我们宣布我们将修改该提案以:

  1. 将 Swift 6 中的警告升级为错误
  2. 为 Swift 5.x 添加一个即将推出的功能标志,以便用户可以逐步迁移其代码。

正如我们在关于 Swift 6 进展的最新帖子中宣布的那样,我们已经使用即将推出的功能标志合并了一些不兼容源代码的更改,计划在 Swift 6 中默认启用这些标志。当初审查 SE-0192 时,这种引入不兼容源代码更改的方法是不可用的,但今天我们认为这是完成此功能的最合适,事实上是我们唯一明智的选择。我们做出了这个决定,考虑到了几个因素,其中包括:

  1. 自 Swift 5 迁移以来已经过去了很多年,而且该警告始终是无法消除的,除非实际编写 @unknown default 情况。

  2. 忽略该警告意味着在遇到未来的枚举案例时留下了一个隐式的运行时陷阱 - 在最坏的情况下,通过编写像 @unknown default: fatalError() 这样的内容,这种行为在Swift 6中仍然可以轻松表达,但在明确处理时,用户可以选择上下文中有意义且不需要停止执行的其他默认行为(例如,返回nil)。

这个有限的修订与启用非扩展枚举的正交、增量工作无关,该工作适用于非弹性库。

  1. 讨论列出类型的存储属性

我心愿已久的一项功能是能够将类型的存储属性与计算属性分开进行分类。目前,通过生成的文档很难整理出所有实例属性,以了解类型的实际表示是什么。

我今天对这个想法进行了一些调查,发现 lib/SymbolGraphGen 目前将所有实例属性都分类为存储属性(vp 2)。

从发出的符号声明中也无法通过访问器的存在({ get }{ get set } 等)来推断这一点,因为这些也会出现在存储的公共 private(set) 属性中。

lib/SymbolGraphGen 要发出这些信息需要什么条件?

回答

有些相关的是,今天晚上我需要了解各种结构的实际布局 - 例如 UnsafeMutableBufferPointer - 最终我不得不深入挖掘 Swift stdlib 源代码中深藏的一些 gyb 模板(然后仔细阅读,以确保我找到了所有的存储属性,因为它们的声明实际上可以出现在文件的任何地方)。

如果你不知道要专门去 GitHub 并具体搜索苹果的 “Swift” 存储库,然后调整语言设置以使其实际显示这些模板文件,你永远找不到它们。搜索引擎非常努力地不显示 GitHub 源代码的结果。

如果它们只是在文档中列出,即使只是在附录或脚注中,我会感到更高兴。

请注意,在这种情况下,顺序也很重要。我需要知道完整的布局,以便将其映射到寄存器等等。

  1. 讨论没有 Reducer 协议的 NavigationStackStore

我们有一个大型项目,从 TCA 的第一个版本开始,目前我们正在使用版本 0.57.0

我们计划迁移到 TCA 的最新版本,但这需要一些时间,而我们需要使用 NavigationStackStore,但由于我们所有的 reducer 都是 AnyReducer 类型,我找不到一种实现的方法。

找到了在 AnyReducer 中使用 Reducer 协议的方法,但找不到一种方法在 Reducer 协议内部使用 AnyReducer 或混合它们

有什么建议吗?

回答

我认为你需要在 Reduce 中封装 AnyReducer。类似这样:

static let reducer: AnyReducer<State, Action, Void> = .combine(
+     AnyReducer(
        Reduce(
            .init { state, action, _ in
                return .none
            },
            environment: ()
        )
        .forEach(\State.path, action: /Action.path) {
            Path()
        }
+     )
    )
  1. 讨论扩展条件列表能力

这只是一个小想法。如果有人愿意接手并制定正式提案和实施,随时可以着手。

在使用了相对新但规模较小的 Verse 编程语言几个月后,我开始喜欢能够在 if 语句的条件列表中创建中间常量和变量,以及执行常规函数的能力。

我开始思考为什么 Swift 没有这样相当方便的功能。与 Verse 不同,Swift 不将抛出错误视为条件。这是可以接受的,我并不打算改变这一点。

以下是我希望在 Swift 中被允许的示例。

之前:

if condition1 {
  var someVariable = ...
  // 使用 `condition1` 进行计算并改变 `someVariable`
  callSideEffect(on: &someVariable)
  callSideEffect()

  if condition2 {
    ...
  } else {
    // 执行失败分支(模拟 A)
  }
} else {
  // A: 执行失败分支
}

之后:

if 
  condition1,
  var someVariable = ..., // 新增(非条件)
  callSideEffect(on: &someVariable), // 新增(非条件)
  callSideEffect(), // 新增(非条件)
  condition2
{
  ...
} else {
  // A: 执行失败分支
}

为了简化问题,将常规的 let 和 var 视为非条件。这有点类似于我们如何在结果构建器中创建本地常量,这些常量不会立即被它消耗。

这个想法将扩展 if、guard 和 while 的条件列表。

回答

将条件列表重构为一个单独的函数使我们能够简化代码为单一的 if/else 分支结构。

func shouldRun() -> Bool {
    guard condition else { return false }
    var someVariable = ...
    callSideEffect(on: &someVariable)
    callSideEffect()
    return condition2
}

if shouldRun() {
  ...
} else {
  // 执行失败分支
}
  1. 讨论any Task 是什么类型

假设我想要将一个任意的任务记录在一个变量中,以便稍后可以取消它。这个变量的类型应该是什么?

var task: Task<Any, Never>
let foo = Task {
    return "Hello World!"
}
let bar = Task {
    return 42
}
task = foo // Cannot assign value of type 'Task<String, Never>' to type 'Task<Any, Never>'

回答

protocol Cancellable {
    func cancel()
}

extension Task: Cancellable {}

var task: Cancellable!

let foo = Task {
    "Hello World!"
}

let bar = Task {
    42
}

task = foo
task.cancel()

话题讨论

如果公司在市中心,你会选择那种方式?

  • 方案一:租住公司附近,节省通勤时间,房租压力大
  • 方案二:租住离公司远,通勤时间长,房租压力小
  • 方案三:住自己的房子

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

推荐博文

Swift 中的崩溃回溯

摘要: 这篇博客讨论了 Swift 5.9 版本中所包含的一些新的调试代码功能,一个能在实时检查崩溃的外部互动性极强的崩溃处理器,一个可以触发调试器进行即时调试的功能,以及一个可以提升理解在一个使用结构化并发的程序中的控制流程的并发意识后退功能。

在 Swift 5.9 版本之前,一旦你的程序运行失败,你只能看到来自父进程(通常是 shell )的消息告诉你子进程崩溃了。而现在,你得到的信息将会更具有详细性。

作者还提出了一个名为"交互式后退"的概念。在许多情况下,你可能会发现你在终端开发的程序崩溃了,但你无法复现问题。没有适当的崩溃日志,这可能会让你非常沮丧,你知道你的程序有一个 bug ,但你不知道问题出在哪里,也不知道如何复现它。这个特性的主要思想就是在程序崩溃后将其挂起,从而给你机会附加一个调试器,或对崩溃过程进行更深入的查看。

最后,后退功能支持结构化并发,并且能够正确地逆向穿过异步框架。无论你在哪个平台上,这个新功能都无需特殊要求,只需要回退追踪器能够查找到符号以确定给定框架是否是异步的。

掌握 SwiftUI 中的 ContentUnavailableView

摘要: 这篇博客介绍了如何在 SwiftUI中 掌握使用 ContentUnavailableView 类型。ContentUnavailableView 类型允许我们在应用中表现空状态、错误状态或其他任何内容不可用的状态。

文章通过实例演示了 ContentUnavailableView 的基本用法以及如何在其中定义描述文本和操作按钮。还介绍了 SwiftUI 为我们提供的一种预制的 ContentUnavailableView 实例,可在搜索屏幕中使用。总的来说,我们学会了如何利用 ContentUnavailableView 以用户友好的方式显示空状态。

SwiftUI 中的 visual effects

摘要: 这篇博客介绍了 SwiftUI 在 WWDC2023 中引入的一种叫做 visualEffect 的新视图修饰符。 visualEffect 允许我们通过访问特定视图的布局信息来附加一组可动画的视觉效果。

通过上述示例,我们可以看到定义了一个文本视图并附加了 visualEffect 视图修饰符。attach visualEffect 视图修饰符时,你需要指定闭包以应用所需的所有效果。

闭包提供了两个参数:第一个参数是附加到视图的效果集合的初始状态,是 EmptyVisualEffect 类型的实例;第二个参数是 GeometryProxy 类型的实例,包含可能需要的视图所有布局信息,比如框架、安全区等。现在,所有这些视觉效果都遵循 VisualEffect 协议,可以在 visualEffect 闭包中使用它们。

关于我们

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

不受父容器大小约束的TextView

序言 为了实现以下效果&#xff0c;特意开发了一个自定义控件。主要是红色的点赞数和评论数。 问题分析 自定义控件 该控件主要是在于忽略的父容器的大小限制&#xff0c;这样可以展示出全部内容。注意父容器的属性中需要下列配置。 package com.trs.myrb.view.count;impor…

[JS设计模式]Flyweight Pattern

Flyweight pattern 享元模式是一种结构化的设计模式&#xff0c;主要用于产生大量类似对象而内存又有限的场景。享元模式能节省内存。 假设一个国际化特大城市SZ&#xff1b;它有5个区&#xff0c;分别为nanshan、futian、luohu、baoan、longgang&#xff1b;每个区都有多个图…

Java 基础学习(十三)集合框架、List集合

1 集合框架 1.1 Collection 1.1.1 集合框架概述 Java 集合框架是一组实现了常见数据结构&#xff08;如列表、树集和哈希表等&#xff09;的类和接口&#xff0c;用于存储一组数据。 开发者在使用Java的集合类时&#xff0c;不必考虑数据结构和算法的具体实现细节&#xff…

使用selenium webdriver和mitmproxy代理模拟用户点击抓包(抓华为应用商城app数据)

文章目录 安装PythonMacWindows 安装程序需要的依赖安装chorm驱动编写代码自动化程序开始抓包 问题处理 本文简单记录一下使用selenium webdriver和mitmproxy代理模拟用户点击抓包的过程。 用于模拟真实的用户访问网站&#xff0c;达到抓包的目的。 作者水平有限&#xff0c;可…

深度解析自动化测试流程(纯干货)

今天就通过这篇文章给大家深度解析一下自动化测试的流程。 自动化测试的流程和功能测试其实挺相似的&#xff0c;整个流程也是按照需求分析及测试计划阶段、测试设计阶段、测试执行和测试总结阶段&#xff0c;总结下来就是下面一张图&#xff0c;ppt中纯手绘&#xff0c;效果不…

天猫数据分析(软件工具)-2023年11月天猫保健品行业分析报告:市场需求扩容,年轻人是主流群体

近年来&#xff0c;随着健康经济、颜值经济的兴起&#xff0c;越来越多的年轻人加入养生大军&#xff0c;成为保健食品市场上的一股新力量&#xff0c;带动市场扩容。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年11月份&#xff0c;天猫平台上保健食品的销量为24…

怎么提取视频中的背景音乐?

当我们在刷视频的时候&#xff0c;有时候听到一个背景音乐很好听&#xff0c;但是又不知道歌名&#xff0c;比如英语歌&#xff0c;这个时候我们很难找到这首歌&#xff0c;相信有很多朋友会遇到这样的问题&#xff0c;不知道怎么弄&#xff0c;下面小编给大家推荐一些方法帮助…

主流数据库体系结构

MySQL 我们通常所说的 MySQL 数据库服务器由一个实例&#xff08;instance&#xff09;以及一个数据库&#xff08;database&#xff09;组成。实例包括一组后台进程/线程和许多内存结构&#xff0c;用于管理数据库&#xff1b;数据库由一组磁盘文件组成&#xff0c;用于存储数…

【数论】欧拉函数

前置知识&#xff1a;分解质因数 一个数可以被分解为质因数乘积 n &#xff0c;其中的pi都是质因数 欧拉函数介绍 朴素法求欧拉函数 思路&#xff1a;边分解质因数边算欧拉函数 void get_primes() {int n; cin >> n;int ans 0;int res n;for (int i 2; i < n /…

docker部署个人网站项目记录(前后端分离)

背景 项目是前后端分离&#xff0c;前端有三部分&#xff0c;分别是 个人网站&#xff08;blog&#xff09;网站后台管理系统&#xff08;admin&#xff09;数据大屏&#xff08;datascreen&#xff09; 后端是基于nodejs写的后台服务 后台接口服务&#xff08;todo-nodejs…

表情识别-情感分析-人脸识别(代码+教程)

表情识别是计算机视觉领域中的一个重要研究方向&#xff0c;它的目标是通过分析人脸表情来判断人的情绪状态。表情识别在很多领域都有广泛的应用&#xff0c;如情感分析、人机交互、智能驾驶等。本文将从以下几个方面来阐述表情识别的相关内容。 一、表情识别的基本原理 表情识…

面试 Java 算法高频题五问五答第二期

面试 Java 算法高频题五问五答第二期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 寻找峰值: 主要思想&#xff1a;二分查找&#xff0c;利用get函数&#xff0…

操作系统 day15(信号量)

信号量机制 之前学习了这些解决进程互斥的方案 *但它们都无法实现“让权等待”&#xff0c;于是Dijkstra提出了一种卓有成效的实现进程互斥、同步的方法----信号量机制 总结&#xff1a;一个信号量对应一种资源。信号量的值这种资源的剩余数量&#xff08;信号量的值如果小于…

Python实现广义最小二乘法线性回归模型(GLS算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义最小二乘法&#xff08;Generalized Least Squares&#xff09;是一种回归分析方法&#xff0c;适…

NLP论文阅读记录 - | 文本生成的动量校准

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法3.1 神经文本生成3.2 动量校准 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 消融实验 五 总结 前言 Momentum Calibration for Text Generat…

MyBatis 关联查询

目录 一、一对一查询&#xff08;sqlMapper配置文件&#xff09; 1、需求&#xff1a; 2、创建account和user实体类 3、创建AccountMapper 接口 4、创建并配置AccountMapper.xml 5、测试 二、一对多查询&#xff08;sqlMapper配置文件&#xff09; 1、需求&#xff1a;…

2024年危险化学品生产单位安全生产管理人员证模拟考试题库及危险化学品生产单位安全生产管理人员理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品生产单位安全生产管理人员证模拟考试题库及危险化学品生产单位安全生产管理人员理论考试试题是由安全生产模拟考试一点通提供&#xff0c;危险化学品生产单位安全生产管理人员证模拟考试题库是根据危…

如何通过蓝牙串口启动智能物联网?

1、低功耗蓝牙(BLE)介绍 BLE 技术是一种低成本、短距离、可互操作的鲁棒性无线技术&#xff0c;工作在免许可的 2,4 GHZ 工业、科学、医学(Industrial Scientific Medical&#xff0c;ISM)频段。BLE在设计之初便被定位为一种超低功耗(Ultra Low Power&#xff0c;ULP)无线技术&…

7ADC模数转换器

一.模数转换原理 ADC模拟-数字转换器可以将引脚上连续变化的模拟电压转换成内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。另外一种是DAC既是与前面相反&#xff0c;如PWM波&#xff0c;由于PWM电路简单且没有额外的功率损耗&#xff0c;更适用于惯性系统的…

Protobuf 编码规则及c++使用详解

Protobuf 编码规则及c使用详解 Protobuf 介绍 Protocol Buffers (a.k.a., protobuf) are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data Protocol Buffers&#xff08;简称为protobuf&#xff09;是谷歌的语言无关、…