Xcode 13.2 beta 2 中的新功能

第二个测试版为 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

发表回复