更新一些SwitfUI 3.0最新添加的一些语法或者控件等等。
Self._printChanges()
由于SwiftUI的更新机制,在很多时候我们需要知道什么引起了页面的更新,在IOS15,macOC12.0以后,我们可以使用Self._printChanges()来打印view变换的内容
import SwiftUI
import TestPackage
struct ContentView: View {
@State var msg: Int = 0
var body: some View {
Self._printChanges()
return Text("\(self.msg)").onTapGesture {
self.msg += 1
}
}
}
这样当View在某个内容更新的时候,控制台会打印出变换的内容,我们可以根据变化的内容来判断问题。


占位显示(redacted)
显示类似占位图效果样式 macOS 11.0+ iOS14.0+ watchOS7.0+
func redacted(reason: RedactionReasons) -> some View
- reason:显示占位样式的原因,是一个OptionSet,现阶段包含 .placeholder 和 .privacy两种
我们可以使用下面的@Environment来获得View是否显示占位的效果
@Environment(\.redactionReasons) var redacted
@available(iOS 15.0, macOS 12.0, *)
struct RedactedView: View {
var body: some View {
Form {
Section {
InfoView(icon: "envelope.badge.fill", text: "834599524@qq.com")
InfoView(icon: "location.circle.fill", text: "北京市昌平区佳运园")
} header: {
Text("个人信息")
.font(.caption)
}
}
}
struct InfoView: View {
var icon: String
var text: String
@State var hide = true
var body: some View {
HStack {
Label(text, systemImage: icon)
.redacted(reason: hide ? .placeholder : .privacy)
Spacer()
Button {
hide.toggle()
} label: {
Image(systemName: hide ? "eye.circle.fill" : "eye.slash.fill")
}.unredacted()
}
}
}
}
