Swift 周报 第三十期

news2024/12/22 0:09:02

文章目录

    • 前言
    • 新闻和社区
      • App、App 内购买项目和订阅即将实行税率调整
      • 码出新宇宙
      • Apple 公证服务更新
      • Apple 设计大奖入围名单公布
    • 提案
      • 通过的提案
    • Swift论坛
    • 推荐博文
    • 话题讨论
    • 关于我们

前言

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

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

求人不如求己,你多一样本领,就少一点啊乞求;Swift社区让你多一样技能,少一些嘲讽!

周报精选

新闻和社区:码出新宇宙,WWDC23 就在眼前

提案:有 4 个提案通过,本期没有产生新的提案

Swift 论坛:PermutableCollection 协议

推荐博文:SwiftUI 中 LinearGradient的用法

话题讨论:

有博主在视频社交平台说,2023年已然迎来了经济危机,只是有些人不愿意相信而已,那么你认为国内2023年是否真的进入了经济危机?

上期话题结果

上期话题讨论结果表明,社交隔阂个人选择标准的提高是导致男女群体互不干涉的主要原因,而社会观念的变化也起到了一定的影响。这些因素共同作用导致了男群体和女群体相互独立地寻找伴侣的现象。

新闻和社区

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 个价格点中选择,为任何店面更改定价。

码出新宇宙

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 设计大奖入围名单公布

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. 提议PermutableCollection 协议

简介

该提案旨在添加一个 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库:https://github.com/tayloraswift/swift-unidoc/blob/master/Sources/System/FileDescriptor.swift

  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实战SwiftUlSwift基础为核心的技术内容,也整理收集优秀的学习资料。

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

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

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

相关文章

C++进阶 —— C++11新增容器

目录 一&#xff0c;array 二&#xff0c;forward_list 三&#xff0c;unordered unordered_set unordered_multiset unordered_map unordered_multimap 静态数组array、forward_list、unordered系列&#xff1b; 一&#xff0c;array array是固定大小尺寸的序列容器&am…

2023年6月东莞/惠州/深圳CPDA数据分析师认证招生

CPDA数据分析师认证是大数据方面的认证&#xff0c;助力数据分析人员打下扎实的数据分析基础知识功底&#xff0c;为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论&#xff0c;提升工作效率和决策能力&#xff0c;遇到问题能够举一反三&#xff0c…

100天精通Golang(基础入门篇)——第1天:学习Go语言基本概念

&#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《I…

实战:Spring Cloud Stream消息驱动框架整合rabbitMq

文章目录 前言Spring Cloud Stream简析Spring Cloud Stream与rabbitmq整合1、添加pom依赖2、application.yml增加mq配置3、定义输入输出信道4、使用输入输出信道收发消息5、模拟正常消息消费6、模拟异常消息 前言 相信很多同学都开发过WEB服务&#xff0c;在WEB服务的开发中一…

Web端3D模型轻量化工具如何实现建筑行业“数字化”建设?

随着数字化技术的飞速发展&#xff0c;建筑行业也在不断寻找新的技术手段来提供高产能和建筑质量。其中&#xff0c;Web端3D模型轻量化工具HOOPS Communicator SDK在建筑行业中的应用不断地得到了市场的广泛注意和应用。本文将深入探讨HOOPS Communicator在建筑行业中的应用及其…

转动的车轮-第14届蓝桥杯国赛Scratch真题初中级组第2题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第144讲。 转动的车轮&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第2题…

Python数据攻略-DataFrame的数据操作

大家好&#xff0c;我是Mr数据杨&#xff0c;今天我们就来谈谈Python中的数据访问和修改。 首先&#xff0c;你们一定都听过《三国演义》吧&#xff0c;里面的人物和事情其实就像我们Python中的数据。比如曹操就像我们的数据元素&#xff0c;他的性格特点、军事才能等就像我们…

5年开发经验,看完这份37W字Java高性能架构,终于拿到架构师薪资

其实现在很多的开发人员并不能解决从架构的角度全方位地了解在Java编程过程中各阶段会出现的典型问题&#xff0c;更没办法深入到底层原理了解问题出现的原因&#xff01; 且随着当下面试越来越深入到底层&#xff0c;如果大家对于底层的原理不了解的话&#xff0c;是很难做出…

JDK11+mybatis-plus+shardingsphere分库分表

1、引入jar dynamic-datasource-spring-boot-starter&#xff1a;2.5.6 sharding-jdbc-spring-boot-starter&#xff1a;4.1.1 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId>&…

微调样本质量胜于数量 LIMA: Less Is More for Alignment

1、总体介绍 大型语言模型的训练分为两个阶段&#xff1a;&#xff08;1&#xff09;从原始文本中进行无监督的预训练&#xff0c;以学习通用的表征&#xff1b;&#xff08;2&#xff09;大规模的指令学习和强化学习&#xff0c;以更好地适应最终任务和用户的偏好。 作者通过…

作为网络安全工程师,都有哪些公司可以选?

招聘平台 首选内推 其次是公司自有招聘平台 再是第三方平台&#xff1a;boos直聘、前程无忧、拉钩、猎聘、牛客、牛聘 乙方 启明星辰 商标&#xff1a;云众可信&#xff0c;云子可信 投资&#xff1a;网御星云&#xff0c;恒安嘉新 拳头产品&#xff1a;Secin 社区、天清…

企企通×天能股份SRM一期项目成功上线,持续深化企业采购数字化

近期&#xff0c;企企通凭借在赋能客户数字化转型方面的优秀实践与丰富的解决方案&#xff0c;荣获天能电池集团股份有限公司&#xff08;以下简称“天能股份”&#xff09;颁发的“2022年度数字化优秀供应商奖”&#xff0c;同时&#xff0c;企企通SRM项目还获得天能股份采购管…

vue-cli4打包优化

项目开始时webpack配置 vue-cli3以后&#xff0c;我们修改webpack配置&#xff0c;需要自己在项目根路径下创建vue.config.js文件。 一、 配置 proxy 跨域 使用vue-cli发开项目&#xff0c;在本地开发环境中&#xff0c;如果遇到跨域的问题。可以通过配置proxy的方式&#xff…

uniapp(二) 之 uniapp 搭建与组件库的引用

小扩展&#xff1a; rpx&#xff08;responsive pixel&#xff09;:可以根据屏幕宽度自适应。规定屏幕宽度为750rpx。如果iphon6上&#xff0c;屏幕宽度为375px,共有750个像素&#xff0c;则750rpx 375培训 750物理像素&#xff0c;1rpx 0.5px 1物理像素。 页面跳转&#xff…

你知道TikTok的推荐算法吗?TikTok数据分析平台哪家好?

作为当下最受欢迎的社交媒体&#xff0c;TikTok这几年的成绩大家也是有目共睹了&#xff0c;超10亿的月活加上大量活跃的年轻人&#xff0c;让无数企业和品牌为之心动。入局的人越来越多&#xff0c;想要在众多竞争者中脱颖而出&#xff0c;入局前需要了解TikTok底层逻辑和推荐…

Treadlocal源码实例详解

我们都知道treadlocal维护变量时候&#xff0c;可以为每个线程维护一个独立的副本&#xff0c;改变的是自己线程的数据。 ThreadLocal公用方法有四个&#xff1a;get&#xff0c;set&#xff0c;remove&#xff0c;intiValue 既然threadLocalMap是局部变量&#xff0c;所以他存…

内网安全:内网渗透.(拿到内网主机最高权限 vulntarget 靶场 1)

内网安全&#xff1a;内网渗透.&#xff08;拿到内网主机最高权限&#xff09; 内网穿透又被称为NAT穿透&#xff0c;内网端口映射外网&#xff0c;在处于使用了NAT设备的私有TCP/IP网络中的主机之间建立连接的问题。通过映射端口&#xff0c;让外网的电脑找到处于内网的电脑。…

中国人民大学与加拿大女王大学金融硕士——人生选对方向很重要

有人说&#xff0c;人生最重要的不是财富、不是荣誉&#xff0c;而是选择一条正确的道路。选择正确的方向&#xff0c;对一个人的成长和事业的成功与否&#xff0c;起着决定作用。有了方向&#xff0c;你前进的每一步都跟接近幸福。在职计划读研的你有了解过中国人民大学与加拿…

Linux - 第23节 - Linux高级IO(一)

1.IO的基本概念 IO的概念&#xff1a; I/O&#xff08;input/output&#xff09;也就是输入和输出&#xff0c;在著名的冯诺依曼体系结构当中&#xff0c;将数据从输入设备拷贝到内存就叫做输入&#xff0c;将数据从内存拷贝到输出设备就叫做输出。 • 对文件进行的读写操作本质…

SpringBoot注解详解,建议收藏!

一、简介 基于 SpringBoot 平台开发的项目数不胜数&#xff0c;与常规的基于Spring开发的项目最大的不同之处&#xff0c;SpringBoot 里面提供了大量的注解用于快速开发&#xff0c;而且非常简单&#xff0c;基本可以做到开箱即用! 那 SpringBoot 为开发者提供了多少注解呢?…