第二个测试版为 Swift 编译器带来了一个非常酷的新构建模式。通过命令行启用它:
defaults write com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 1
这是 SwiftUI 的一个非常轻量级的更新。让我们看看有什么新鲜事。
文本字段和安全字段
二者TextField并SecureField配有许多初始化:代替具有与默认值的参数,这些视图现在有不同的过载,或者要求或省略这样的参数。
例如我们从:
extension TextField where Label == Text {
public init<S>(_ title: S, text: Binding<String>, prompt: Text? = nil) where S : StringProtocol
}
到:
extension TextField where Label == Text {
public init<S>(_ title: S, text: Binding<String>, prompt: Text?) where S : StringProtocol
public init<S>(_ title: S, text: Binding<String>) where S : StringProtocol
}
此更改涵盖所有TextField/SecureField重载,对于第三方开发人员来说是完全无缝的,并且一直向后移植到 iOS 13.0、macOS 10.15、tvOS 13.0、watchOS 6.0。
由于我们在此处介绍了@_alwaysEmitIntoClient,因此可以使用此后向端口。
例如,如果我们看一下 SwiftUI 的 Swift Interface,我们将看到第二个初始化程序的实现(从上面开始):
extension TextField where Label == Text {
@_alwaysEmitIntoClient @_disfavoredOverload
public init<S>(_ title: S, text: Binding<String>) where S : StringProtocol {
self.init(title, text: text, onCommit: {})
}
}
…而第一个初始化器刚刚删除了默认值:
// From:
public init<S>(_ title: S, text: Binding<String>, prompt: Text? = nil) where S : StringProtocol
// To:
public init<S>(_ title: S, text: Binding<String>, prompt: Text?) where S : StringProtocol
所有这些与早期操作系统兼容的新初始化器都带有与带有“extra”参数的原始初始化器相同的文档,并提到了:
- prompt 范围
- 焦点API
- View.onSubmit 视图修饰符
这很可能是一个疏忽,但如果这是一个暗示这些功能的后向移植正在进行中的暗示,那就太好了。
精品教程推荐
加入我们一起学习SwiftUI
QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com