Xcode 13.2 beta 发布,Swift 这个更新太赞了
Posted 小集
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xcode 13.2 beta 发布,Swift 这个更新太赞了相关的知识,希望对你有一定的参考价值。
苹果在 10 月 27 号 发布了 Xcode 13.2 beta 版本,这个版本最受开发者欢迎的无疑是 Swift Concurrency 的向后兼容性了,现在可以在部署到 macOS 10.15、ios 13、tvOS 13 和 watchOS 6 或更高版本的应用程序中使用 Swift Concurrency。这种支持包括异步/等待、参与者、全局参与者、结构化并发和任务 API。
当然,除了这一条外,还有其它的一些更新,一起来看看。
Large Content ViewerVStack
Button( .accessibilityShowsLargeContentViewer()
Button( .accessibilityShowsLargeContentViewer
Text(
Large Content Viewer 是自 iOS 13 以来一直存在的辅助功能。
简而言之,当启用可访问性动态类型大小时,它允许我们通过系统 HUD 放大/突出显示用户悬停的 UI 元素。
使用 Xcode 13.2,我们现在也可以将它与 SwiftUI 一起使用。
除了示例中显示的两个视图修饰符之外,SwiftUI 现在还带有一个新的 accessibilityLargeContentViewerEnabled 环境变量,可用于我们需要更改某些手势行为以适应此辅助功能的情况。
文档视图修饰符和环境变量均可从 iOS 15.0、macOS 12.0、tvOS 15.0、watchOS 8.0 获得。
虽然 Xcode 13.2b1 没有带来许多新的 SwiftUI 功能,但苹果在 SwiftUI 的文档中进行了重大且受欢迎的升级。
新文档可用于:
SectionedFetchRequest
SectionedFetchResults
Text
TextField
ToggleStyle
toggleStyle(_:)
ToggleStyleConfiguration
ToggleStyle.automatic
所有最近的 background 和 overlay 视图修改器
让我们重点介绍一些重要的变化。
TextField 的 prompt 与 title
更新后的 TextField 文档有一整节解释为什么我们有标题/标签和提示参数,以及两者的使用:
Each text field style determines where and when the text field uses a prompt and label.
For example, a form on macOS always places the label at the leading edge of the field
and uses a prompt, when available, as placeholder text within the field itself. In the
same context on iOS, the text field uses either the prompt or label as placeholder
text, depending on whether the initializer provided a prompt.
(Toggle) 样式默认值和上下文默认值
SwiftUI 的样式具有很强的适应性,可以根据上下文进行广泛的更改。之前大家都在猜测在哪些场景中采用了哪种风格(并且只能通过实验来回答)。
在这次更新之后,不再需要猜测,因为文档清楚地说明了我们的 Toggle 在不同场景中的显示方式。
一些措辞的变更:从“primitive”到“build-in”
当提到视图、样式、命令等的内置 SwiftUI 定义时,官方措辞是“primitive”。
然而,术语“primitive”并不总是正确的,因为有时,甚至内置定义也由其他 SwiftUI 组件组成。为了解决这个问题,文档已将措辞从“primitive”更改为“build-in”。
更大胆的弃用
尽管 SwiftUI 对使用哪种语法有明确的指导,但大多数旧定义仍然可用,并且被弃用,并带有诸如“您也可以使用 X”之类的温和消息。Xcode 13.2 中的新功能,这些消息更加粗体,并使用命令式词来指导开发人员使用什么。
Xcode 13.2 beta 包括对使用 Swift Playgrounds 4 创建的应用项目的支持。
TextureConverter 1.1 添加了对在构建期间解压缩纹理的支持。还可以使用 TextureConverter 作为独立工具在构建过程之外解压缩纹理。要使用,请使用 --decompressed
选项设置解压缩文件的文件路径。
TextureConverter 1.1 添加了对错误度量的支持。设置 --metrics
选项在压缩时计算,或使用 --compare 计算两个纹理文件之间的误差。
当输出纹理是最新的时,TextureConverter 1.1 添加了对跳过压缩的支持。使用 --check_date
选项比较输入和输出纹理的修改日期和时间。使用 --check_details
选项比较用于压缩的 TextureConverter 版本和使用的压缩选项(仅限 KTX 文件)。
添加了对智能洞察通知的支持。在您的应用程序中监控电源和性能回归时接收通知。单击 Xcode Organizer 的 Regressions 视图右上角的钟形图标以启用通知。
Swift Concurrency 的向后兼容性无疑是本次更新最大的亮点,借助这一能力,开发者可以更高效去处理并发问题。关于 Xcode 13.2 beta 版本更多信息,可以参考 Xcode 13.2 Beta Release Notes , https://developer.apple.com/documentation/xcode-release-notes/xcode-13_2-release-notes
Xcode 6.3 Beta发布,Swift 1.2带来哪些新变化?
北京时间2月10日,苹果在面向开发者推送iOS 8.3 Beta的同时,还发布了版本号为6D520o的Xcode 6.3 Beta,其中便包含了iOS 8.3 Beta和OS X v10.10 SDK,并进一步提升了Swift与Objective-C代码的交互性,而Swift业已更新至1.2版本。
从Xcode 6.3 Beta Release Notes看出,Xcode 6.3 Beta包含了很多颇为值得开发者期待的改变,共计50多处改动,同时修改了Objective-C的语法,足见苹果对Swift语言的重视。而其代码迁移工具可以帮助开发者将其代码从Swift 1.1(Xcode 6.1)升级至Swift 1.2(Xcode 6.3),具体执行编辑菜单(Edit)->转换(Convert)-至(To)Swift1.2即可。 具体更新如下:
Swift语言的增强
Swift现在支持目标增量编译,例如当一个文件改变时不会重新编译Target中的每一个文件。这个基于固有依赖分析。所以你依然会看到有很多文件在必要情况下被重编。如果你发现需要重编但没有重编的情况,请报一个Bug出来。清理Target后再编,会按照往常的流程进行。
增加了一个新的Set数据类型,它提供了元素唯一化,且有完整语义的通用数据类型集合。它和NSSet类型桥接,提供和Array和Dictionary相类似的功能。
if let语句现在被扩展为可以支持多条条件判断:
if let a = foo(), b = bar() where a < b,
let c = baz() {
}
它允许你测试多种选择,并且包含一个bool判断。当然这种情况不包含嵌套判断。
let常量现在生成时不需要立即初始化,新的规则是let常量必须在被首次使用前初始化即可(和var一样)。或者说它只能被初始化,也就是说在初始化后它不能再被改变或者重新赋值,可用的模式如下:
let x: SomeThing
if condition {
x = foo()
} else {
x = bar()
}
use(x)
这个正常的来说需要var变量用法,尽管这里没有任何修改的操作。
"Static"静态方法和属性现在允许在class中使用(作为“class final”的别名)。你现在可以在类中声明一个静态存储属性,它享有全局存储空间和首次使用再初始化的惰性构造功能。协议Protocal现在会声明一个static的类型要求而不是声明一个class的要求。
对于表达式闭包的类型引用有了几点改进:
含有单返回语句的闭包现在类型检查时以单表达式闭包处理。
匿名的且含有非空返回类型的单表达式现在可以用在Void上下文中。
多表达式的闭包类型的情况可能无法被类型推断出来,这归功于缺乏返回类型的情况能被正确的推断出来。
Swift中的枚举类型现在可以通过@objc关键字导出到Objective-C中。@objc的枚举类型必须定义一个整型的原始类型,并且该枚举不能泛型化或者不能使用关联值。由于Objective-C中的枚举类型没有命名空间,所以导出到Objective-C中的枚举类型以枚举名字和case项目名字的组合的方式使用。 比如在Swift中的声明:
@objc
enum Bear: Int {
case Black, Grizzly, Polar
}<br>
导出到Objective-C:
typedef NS_ENUM(NSInteger, Bear) {
BearBlack, BearGrizzly, BearPolar
};
Objective-C语言的扩展语法现在可以判断出Objective-C API中指针或者block的是否为空,同时允许不带ImplicitlyUnwrappedOptional协议地导出Objective-C API函数。
Swift现在可以部分支持导入C的联合类型,包括unions、bitfileds、SIMD vector类型以及其他Swift的不支持的C特性。这些不被支持的元素不能在Swift中的直接访问,但是在Swift中,Objective-C或者C可以以参数或者返回类型的方式使用。这包括Foundation NSDecimal类型、GLKit GLKVector和GLKMatrix类型,以及其他一些类型。
被导入的C结构体现在在Swift中有一个默认的构造器,它会将结构体中的所有的元素初始化为0,例如:
import Darwin
var devNullStat = stat()
stat("/dev/null", &devNullStat)
如果一个结构体的元素不能被正确的初始化为0(比如被标记为新的_nonnull标示符时),这个默认的构造器将会终止。
String的索引类型间新的转换API现在可以用了,如String、String.UnicodeScalarView、String.UTF16View以及String.UTF8View, 同时每个String View转换为String的函数也可使用。
类型值在println函数或者字符串内插算法中现在可以打印完整的类型名称了:
toString(Int.self) // 打印 “Swift.Int"
println([Float].self) // 打印 "Swift.Array<Swift.Float>”
println((Int, String).self) // 打印 "(Swift.Int, Swift.String)"
一个新的“@noescape”属性可以用在函数的闭包参数上,这意味着这个参数是唯一可被调用的(或者用在函数调用时以参数的方式出现),其意思是它的生命周期比函数调用的周期短,这有助于一些小小的性能优化,但最重要的是它屏蔽了闭包中对self.的需求。这使得函数的控制流比其他更加透明。在未来的beta版本中,标准库函数将普遍采用这种特性,比如autoreleasepool():
func autoreleasepool(@noescape code: () -> ()) {
pushAutoreleasePool()
code()
popAutoreleasePool()
}
相比Swift 1.1,Swift 1.2在很多方面的性能上有本质的提高,比如多维数组算法更快,未优化的代码更加快速。
表达式类型的错误诊断有了很大的提高。
很多通用表达式的检查效率有很大提高,这个有助于降低编译时间和减少“expression too complex”的错误。
点击“阅读原文”可查看全文并参与讨论。
以上是关于Xcode 13.2 beta 发布,Swift 这个更新太赞了的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 6.3 Beta发布,Swift 1.2带来哪些新变化?
Xcode 8 beta 6 swift 3 本地化CaseInsensitiveCompare