Swift 周报 第二十七期( 三 )


讨论为什么观察者在使用集合中已有的值调用插入后会触发 Set 类型的属性?
Xcode中的以下代码片段:
【Swift 周报 第二十七期】import UIKitvar collection = Set() {didSet {print("didSet")}}collection.insert("Test1")collection.insert("Test2")collection.insert("Test1")collection.insert("Test3")print("Done")
为什么是输出:
didSetdidSetdidSetdidSetDone
而不是:
didSetdidSetdidSetDone
为什么当集合未更改时它会触发,因为该值已经在集合中?
回答:
每个函数都会像这样 。
没有特殊的机制可以让属性知道 Set 没有在内部被修改 。
讨论可变参数泛型的同时简单但可能致命复杂的使用
我很好奇即将到来的可变参数泛型特性是否能让我们实现像 (: 这样的函数,你可以在下面看到它的使用:
extension String {var hasPrimeNumberOfCharacters: Bool {transform(self,{ $0.count },{ $0.isPrime })}}
该函数采用一个强制性的第一个参数,即要转换的值,然后是一个可变的转换闭包列表,每个闭包都对它之前的闭包的输出类型进行操作,第一个对初始值进行操作 。在上面的例子中,参数是:, ()->Int, (Int)->Bool 。
我已经阅读了大量的可变参数泛型文档,如果我现在必须给出我最好的猜测,我会说我的 (: 函数在可变参数泛型的第一次迭代中是不可能的 。
下面是一个非常粗略的草图,它是我能想象到的最接近如何编写这样一个函数签名的草图 。我发现有必要发明许多新的语法,这支持了我的猜测,即这是不可能的,至少在最初是不可能的 。
func transform(_ initialValue: InitialValue,_ transform: repeat each (T)->U)-> last U or InitialValuewhere first T == InitialValue {// How would one even implement this if the above syntax were valid?}
讨论为 / 构建发行版?
现在我希望在Nano(它有一个 ARM -A57 CPU)上用 Swift 做一个机器人项目,它只能使用18.04 。18.04 没有预构建的 5.8 .deb 包,这有点痛苦,因为这意味着我必须从源代码构建,并且一些构建依赖项(例如 cmake)必须从源代码构建才能获得最新的 足够的版本 。我以前构建过工具链,现在我正在Nano 上构建它,但它花费了很长时间,尽管构建在连接的 SSD 上(操作系统运行在 SD 卡上) 。
我想知道在我的 M1 MaxPro 上的18.04容器(或者可能是VM)中构建工具链是否有意义,然后构建将正确安装在任何 18.04 ARM 机器上的工具链的 .deb 。
你认为那会建造得更快吗?
是否存在对构建 .deb 包的支持? 20.04 和 22.04 包是如何构建的?
回答:
另一种选择是构建 MacOS -> 18.04 交叉编译工具链 。不久前,我将 x- 配置移到了 focus,但要翻转回配置应该很容易 。
发布Swift 5.8 发布!
您可能已经看到,Swift 5.8 现已正式发布!此版本包括对语言和标准库的主要补充,包括支持逐步采用即将推出的功能的 、改进的开发人员体验、改进 Swift 生态系统中的工具,包括 Swift-DocC、Swift和 ,经过改进支持等 。
推荐博文
在中掌握的使用
摘要: 文章介绍了如何使用视图在中绘制 2D 图形,而无需使用 Shape API。在视图中,我们可以使用实例进行绘图,调整透明度、缩放和混合模式等参数,并添加不同的滤镜 。还提供了 、 fill 和 clip 函数,允许我们绘制任何我们需要的路径,同时也提供了draw函数,允许我们绘制文本和图像 。我们可以使用类型绘制任何视图,但需要在创建时使用闭包中注册它们 。虽然视图不支持动画,但可以通过将其嵌入到带有动画调度程序的中来实现动画效果 。视图没有辅助功能树,但可以附加一组辅助视图修饰符,以使每个人都可以访问其内容 。