本期是 Swift 编辑组自主整理周报的第七期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。
欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。
当你来到双水村以外的大世界,你的人生目标便不单单是一名庄稼人了。Swift社区陪你一起成长,一起创造更多可能!👊👊👊
周报精选
新闻和社区:【挑战上岛】适配实时活动和灵动岛
提案:函数反向部署
Swift 论坛:围绕 Swift 6 lock 展开的讨论
推荐博文:推荐 500+ 款 App UI 设计
工具推荐:妙言
话题讨论: 如果您年龄超过 35 岁被裁员,再入职时能接受降薪吗?
Apple 大中华区设计与开发加速器推出全新挑战活动,邀请开发团队限期完成实时活动和灵动岛适配。
实时活动用于在 iPhone 锁屏以及灵动岛上显示来自 App 的最新信息,帮助用户及时查看当前任务和事件的进展。参与此次活动,您将了解如何设计和开发您的实时活动,以及如何利用灵动岛带来更出色的用户体验。
我们会提供主题设计与开发讲座,您将了解如何设计和开发您的实时活动,以及如何利用灵动岛带来更出色的用户体验。
参与讲座的开发团队可在讲座当天报名参与实时活动和灵动岛适配挑战,通过审核后可获得一对一的咨询与深度辅导。参加挑战,并能够在 2022 年 12 月 20 日前完成适配和上线的团队,将有机会获得更多 App 的推广机会。
名额有限。请在 2022 年 11 月 8 日前报名参加。
要报名参加,您必须是位于大中华区的 Apple Developer Program 成员。
导航是一个 App 的核心,它可以将用户带往 App 里功能不同的页面当中,因此,清晰而强大的导航架构对 App 而言是非常重要的。通过本次活动,我们将从设计和研发两方面来为您介绍,如何使用 SwiftUI 来实现 App 的导航架构,让用户能快速定位到 App 的各项功能。
名额有限。请在 2022 年 11 月 7 日前报名参加。
要报名参加,您必须是位于大中华区的 Apple Developer Program 成员。
Beta 版iOS 16.2、iPadOS 16.2、 macOS 13.1、Apple tvOS 16.2 和 watchOS 9.2 现已推出。请确认您的 App 在这些版本上工作正常,确保 App 做好准备。要利用最新 SDK 中的改进功能,请务必使用 Xcode 14.1 RC 2 进行构建和测试。
要了解之前 Beta 版本中的已知问题是否已解决或是否有临时应对办法,请查看最新的发布说明。如果您遇到问题或有其他反馈,请告诉我们。我们十分重视您的反馈,并相信您的反馈对我们解决问题、优化功能和更新文档将大有助益。

Apple Search Ads 让您能轻松地在 App Store 上推广自己的 App。现在,借助全新的“Today”标签页和产品页广告投放位置,您在 App Store 上提升 App 曝光度的机会大大增加 — 当人们首次登陆、搜索特定内容和浏览要下载的 App 时,都是您推广自己 App 的大好时机。
在中国大陆的 App Store 上暂不可用。
SE-0375 允许非可选非空参数传递给可选类型的参数 提案已通过。该提案已在十五期周报正在审查的提案模块做了详细介绍。
SE-0373 取消 result builders 中对变量的所有限制 提案已通过。该提案已在十五期周报正在审查的提案模块做了详细介绍。
SE-0377 提出了新的 borrow 和 take 参数修饰符 正在审查。
本提案提出的 borrow 和 take 参数修饰符,允许开发人员自主选择函数,用于接收不可变参数的所有权约定。这样可以通过减少调用函数所需的 ARC 来优化性能,并为 move-only 类型提供了必要的先决条件,指定函数是否会消耗 move-only 值。
SE-0376 函数反向部署 提案正在审查。
弹性 Swift 资源库,例如 Apple 平台 SDK 中存在的库,作为动态库分发。这些库的作者使用 @available 注释来指示引入声明的操作系统版本。
函数反向部署可以避免下面的缺点:
SE-0366 代码上下文新增敏感关键字 move 修订后,重新审查。该提案已在十一期周报正在审查的提案模块做了详细介绍。
提议动机: 在 Swift 5.7 中,分布式 Actor 被引入为名义类型。 与 Actors 类似,它们可以使用 distributed actor 关键字对来声明。 就它们自己而言,它们不能真正做任何事情, 所有分布式的行为比如 actor 的行为实际上都由给定 actor 类型相关联的 ActorSystem 处理。具体来说,一个 actor 必须声明它将与什么类型的 actor 系统一起使用,如下所示:
import Distributed
import DistributedCluster
distributed actor Greeter {
typealias ActorSystem = ClusterSystem
distributed func hello(name: String) -> String {
return "Hello \(name)!"
}
}
这样的 Greeter 声明可以在集群分布式 actors 系统中使用此类。 也可以声明一个模块范围的默认分布式 actor 系统类型。有关更多信息,可以参考 Swift Distributed Actor Runtime 和 Swift Distributed Actor Isolation 这是大多数用户可能使用此功能的方式,如下所示:
typealias DefaultDistributedActorSystem = ClusterSystem
为了避免在每个分布式 actor 模块中重复声明 ActorSystem 类型别名。这里提出的包提供了 ClusterSystem 的实现。
解决方案: DistributedCluster 中包括 ClusterSystem 类型,它是库的核心部分。 创建之后,它会绑定到主机/端口对并开始监听传入连接:
@main
struct Main {
static func main() async throws {
let system = await ClusterSystem("FirstSystem") { settings in
settings.endpoint.host = "127.0.0.1"
settings.endpoint.port = 7337
}
try await system.terminated
}
}
3)提议Package Registry Authentication
在SE-0292(API 规范)中提出的package registry服务可能需要对其部分或全部 API 进行身份验证,以便识别执行操作的用户并相应地授权请求。
提议动机: Web 服务中常见的身份验证方法包括基本验证 (authentication), access token 和 OAuth。 SwiftPM 目前仅支持基本验证,这限制了它与包注册服务交互的能力。
建议的解决方案: 建议修改 swift package-registry 指令和 registry 的配置并且加入 token authentication 的支持。 这些更改还应确保将来可以灵活地添加其他验证方法。
4)提议方便的 AsyncThrowingStream.makeStream 方法
在SE-0314中介绍了 AsyncStream 和 AsyncThrowingStream,它们充当标准库提供的 AsyncSequence。
提议动机:在使用 Async[Throwing]Stream 一段时间后,我们发现一个常见的用法是将 continuation 和 Async[Throwing]Stream 传递到不同的地方。这需要将 Async[Throwing]Stream.Continuation excaping 并且出传递给初始化程序的闭包。Escaping continuation 使用起来不方便,因为它需要对隐式 optional value 进行格外的操作。
建议的解决方案:为了填补这个不足,建议在 AsyncStream 和 AsyncThrowingStream 上添加一个新的静态方法 makeStream ,它返回 stream 和 continuation。
如果您年龄超过 35 岁被裁员,再入职时能接受降薪吗?
请在文末留下您满意的答案。
Swift社区是由 Swift 爱好者共同维护的公益组织,我们会分享以 Swift实战、SwiftUl、Swift基础为核心的技术内容,也整理收集优秀的学习资料。
特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。
我正在尝试使用Ruby将二进制文件转换为十六进制。目前我有以下内容:File.open(out_name,'w')do|f|f.puts"constunsignedintmodFileSize=#{data.length};"f.puts"constcharmodFile[]={"first_line=truedata.bytes.each_slice(15)do|a|line=a.map{|b|",#{b}"}.joiniffirst_linef.putsline[1..-1]elsef.putslineendfirst_line=falseendf.puts"};"end这是以下代
如何在ruby中将十六进制字符串转换为32位有符号整数?例如a="fb6d8cf1"#hexstring[a].pack('H*').unpack('l')#fromthedocumentationitunpackstoits32bitsignedint它转换为-242455045但实际答案是-76706575你能指出我做错了什么吗? 最佳答案 您似乎遇到了字节序问题。这给出了期望的结果:[a].pack("H*").unpack("l>")#=>[-76706575]["038a67f90"].pack("H*").unpac
我正在用Ruby编写一个6502汇编器。我正在寻找一种方法来验证字符串形式的十六进制操作数。我知道String对象提供了一个“十六进制”方法来返回一个数字,但是我遇到了一个问题:"0A".hex#=>10-avalidhexadecimalvalue"0Z".hex#=>0-invalid,producesazero"asfd".hex#=>10-Why10?Iguessitreads'a'firstandstopsat's'?输入一堆乱码会得到一些奇怪的结果。我需要的是一种方法来首先验证该值是合法的十六进制字符串。我在玩正则表达式,并意识到我可以做到这一点:trueif"0A"=~/
尝试使用SecureRandom类Rails生成随机数字。我们能否使用SecureRandom.hex创建一个仅包含数字而不含字母的随机数。例如:代替SecureRandom.hex(4)=>"95bf7267"应该给SecureRandom.hex(4)=>"95237267" 最佳答案 查看SecureRandom的API:http://rails.rubyonrails.org/classes/ActiveSupport/SecureRandom.html我相信您正在寻找一种不同的方法:#random_number。Secur
我有一种情况需要在Ruby中将二进制值转换为十六进制。我的情况如下:当bin="0000111"时,我的输出应该是:hex="07"。当bin="010001111"时,我的输出应该是:hex="08f"。有人可以帮我解决这个问题吗?提前致谢。 最佳答案 怎么样:>>"0x%02x"%"0000111".to_i(2)#=>"0x07">>"0x%02x"%"010001111".to_i(2)#=>"0x8f"编辑:如果您不希望输出为0x..而只是0..则省略第一个x格式字符串。 关于
我需要在Ruby(实际上是Rails)程序的正则表达式中匹配md5校验和。我在某处发现我可以将十六进制字符串与\h序列匹配,但我找不到链接了。我正在使用该序列并且我的代码在Ruby1.9.2中运行。我什至可以让它在普通IRB下工作(因此它不是Rails扩展)。ruby-1.9.2-p180:007>"123abcdf"=~/^\h+$/;$~=>#ruby-1.9.2-p180:008>"123abcdfg"=~/^\h+$/;$~=>nil但是我的IDE将该表达式标记为错误,我找不到任何引用该序列的引用。在任何环境/版本下,RubyRegex中的\h序列是否合法,或者我应该相信我的想
我必须检查4个字符的字符串是否都是有效的十六进制,我发现了另一个问题,它准确地演示了我想做什么,但它是Java:RegextocheckstringcontainsonlyHexcharacters我怎样才能做到这一点?我阅读了有关正则表达式的ruby文档,但我不明白如何根据此匹配项返回true或false? 最佳答案 在ruby正则表达式中,\h匹配一个十六进制数字,\H匹配一个非十六进制数字。所以!str[/\H/]就是您要查找的内容。 关于Ruby,检查字符串是否都是有效的
我有一个文件的MD5十六进制摘要的字符串表示,我想将其转换为base64,以便在上传时使用Content-MD5HTTPheader。是否有比以下更清晰或更有效的机制?defhex_to_base64_digest(hexdigest)[[hexdigest].pack("H*")].pack("m").stripendhex_digest="65a8e27d8879283831b664bd8b7f0ad4"expected_base64_digest="ZajifYh5KDgxtmS9i38K1A=="raise"Doesnotmatch"unlesshex_to_base64_di
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Hextobinaryinruby在Python中,我可以执行以下操作:>>>str='000E0000000000'>>>str.decode('hex')'\x00\x0e\x00\x00\x00\x00\x00'如果我必须在ruby中实现相同的输出,我可以调用哪个?to_s(16)试过了,好像不行。我需要采用该特定格式的输出,因此我希望得到以下内容:"\\x00\\x0e\\x00\\x00\\x00\\x00\\x00"
我正在尝试将十六进制值转换为二进制值(十六进制字符串中的每一位都应具有等效的四位二进制值)。我被建议使用这个:num="0ff"#(sayforeg.)bin="%0#{num.size*4}b"%num.hex.to_i这给了我正确的输出000011111111。我对它的工作原理感到困惑,尤其是%0#{num.size*4}b。有人可以帮我解决这个问题吗? 最佳答案 您还可以:num="0ff"num.hex.to_s(2).rjust(num.size*4,'0')您可能已经想通了,但是,num.size*4是您要用0填充输出的