通用 SwiftUI 视图的字符串推理协议
String Inference Protocol For Generic SwiftUI View
我遇到了一个问题,如果有的话,存在协议来指定 SwiftUI 中的通用类型,以在 Text
视图中显示为文本。
import SwiftUI
struct GenericTextView<A: DeclarationInQuestion>: View {
var printableInstance: A
var body: some View {
Text("\(printableInstance)")
}
}
struct GenericTextView_Previews: PreviewProvider {
static var previews: some View {
GenericTextView(printableType: Int(1))
}
}
如果有解决方案,我将如何定义和声明A
?
这取决于您是尝试显示传递的值,还是尝试显示传递的键的本地化字符串。看起来您正在尝试显示传递的值,但您的代码正在调用本地化密钥的初始化程序。您可能想使用 Text(verbatim:)
:
struct GenericTextView<A>: View {
var printableInstance: A
var body: some View {
Text(verbatim: "\(printableInstance)")
}
}
就是说,我会避免那样写。没有理由 re-stringify 这样的价值。您可以将其字符串化一次并避免泛型:
struct GenericTextView: View {
var string: String
init<Value>(_ value: Value) {
string = "\(value)"
}
var body: some View {
Text(verbatim: string)
}
}
这种方法还允许本地化密钥,只需删除 verbatim:
。
我遇到了一个问题,如果有的话,存在协议来指定 SwiftUI 中的通用类型,以在 Text
视图中显示为文本。
import SwiftUI
struct GenericTextView<A: DeclarationInQuestion>: View {
var printableInstance: A
var body: some View {
Text("\(printableInstance)")
}
}
struct GenericTextView_Previews: PreviewProvider {
static var previews: some View {
GenericTextView(printableType: Int(1))
}
}
如果有解决方案,我将如何定义和声明A
?
这取决于您是尝试显示传递的值,还是尝试显示传递的键的本地化字符串。看起来您正在尝试显示传递的值,但您的代码正在调用本地化密钥的初始化程序。您可能想使用 Text(verbatim:)
:
struct GenericTextView<A>: View {
var printableInstance: A
var body: some View {
Text(verbatim: "\(printableInstance)")
}
}
就是说,我会避免那样写。没有理由 re-stringify 这样的价值。您可以将其字符串化一次并避免泛型:
struct GenericTextView: View {
var string: String
init<Value>(_ value: Value) {
string = "\(value)"
}
var body: some View {
Text(verbatim: string)
}
}
这种方法还允许本地化密钥,只需删除 verbatim:
。