SwiftUI Edit/override 应用程序中的所有警报
SwiftUI Edit/override all Alerts across the app
由于在许多屏幕上处理错误的特定情况,我的应用程序中有很多警报,现在我需要在任何警报显示时显示时间,有没有办法edit/override 提醒所以它只包括调试时间?
例如,我可以通过以下方式为所有打印件实现此目的:
import Foundation
func print(_ items: Any..., separator: String = " ", terminator: String = "\n"){
#if DEBUG
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
Swift.print( df.string(from: Date()) )
items.forEach{
Swift.print([=11=], separator: separator, terminator: terminator)
}
#endif
}
但是如何在不将每个实例都更改为另一个元素的情况下覆盖像 Alert 这样的东西?
我会推荐你只写一个函数,用一个正常的名字,比如customAlert(...)
。这更清楚地表明它是自定义的,而且该函数有一个很好的命名方案,与调用它 Alert
不同。 Alert
是不明确的,并且使用完全相同的参数,你会得到一个编译时错误。一旦您将 Alert
的所有实例重命名为 customAlert
,您将永远不必再次进行此更改。
示例:
func customAlert(title: Text, message: Text? = nil, dismissButton: Alert.Button? = nil) -> Alert {
func alertMessage() -> Text? {
#if DEBUG
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = "Date: \(df.string(from: Date()))"
if let message = message {
return Text("\(date)\n\n") + message
} else {
return Text(date)
}
#else
return message
#endif
}
return SwiftUI.Alert(title: title, message: alertMessage(), dismissButton: dismissButton)
}
用法:
struct ContentView: View {
@State private var presentAlert = false
var body: some View {
Button("Present alert") {
presentAlert = true
}
.alert(isPresented: $presentAlert) {
customAlert(title: Text("Title"), message: Text("Message"))
}
}
}
由于在许多屏幕上处理错误的特定情况,我的应用程序中有很多警报,现在我需要在任何警报显示时显示时间,有没有办法edit/override 提醒所以它只包括调试时间?
例如,我可以通过以下方式为所有打印件实现此目的:
import Foundation
func print(_ items: Any..., separator: String = " ", terminator: String = "\n"){
#if DEBUG
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
Swift.print( df.string(from: Date()) )
items.forEach{
Swift.print([=11=], separator: separator, terminator: terminator)
}
#endif
}
但是如何在不将每个实例都更改为另一个元素的情况下覆盖像 Alert 这样的东西?
我会推荐你只写一个函数,用一个正常的名字,比如customAlert(...)
。这更清楚地表明它是自定义的,而且该函数有一个很好的命名方案,与调用它 Alert
不同。 Alert
是不明确的,并且使用完全相同的参数,你会得到一个编译时错误。一旦您将 Alert
的所有实例重命名为 customAlert
,您将永远不必再次进行此更改。
示例:
func customAlert(title: Text, message: Text? = nil, dismissButton: Alert.Button? = nil) -> Alert {
func alertMessage() -> Text? {
#if DEBUG
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = "Date: \(df.string(from: Date()))"
if let message = message {
return Text("\(date)\n\n") + message
} else {
return Text(date)
}
#else
return message
#endif
}
return SwiftUI.Alert(title: title, message: alertMessage(), dismissButton: dismissButton)
}
用法:
struct ContentView: View {
@State private var presentAlert = false
var body: some View {
Button("Present alert") {
presentAlert = true
}
.alert(isPresented: $presentAlert) {
customAlert(title: Text("Title"), message: Text("Message"))
}
}
}