Generics 通用SwiftUI视图的字符串推断协议

Generics 通用SwiftUI视图的字符串推断协议,generics,view,swiftui,protocols,inference,Generics,View,Swiftui,Protocols,Inference,我遇到了一个问题,即存在哪些协议来指定SwiftUI中的泛型类型,以在text视图中显示为文本 import SwiftUI struct GenericTextView<A: DeclarationInQuestion>: View { var printableInstance: A var body: some View { Text("\(printableInstance)") } } struct

我遇到了一个问题,即存在哪些协议来指定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))
    }
}
导入快捷界面
结构GenericTextView:视图{
var printableInstance:A
var body:一些观点{
文本(“\(printableInstance)”)
}
}
结构GenericTextView\u预览:PreviewProvider{
静态var预览:一些视图{
GenericTextView(可打印类型:Int(1))
}
}

如果有解决方案,我将如何定义和声明
a

这取决于您是尝试显示传递的值,还是尝试显示传递的键的本地化字符串。看起来您正试图显示传递的值,但您的代码正在为本地化键调用初始值设定项。您可能希望使用
文本(逐字:)

struct GenericTextView:View{
var printableInstance:A
var body:一些观点{
文本(逐字:“\(printableInstance)”)
}
}
也就是说,我不会那样写。没有理由以这种方式重新字符串化该值。您只需将其字符串化一次,即可避免使用通用的:

struct GenericTextView: View {
    var string: String

    init<Value>(_ value: Value) {
        string = "\(value)"
    }

    var body: some View {
        Text(verbatim: string)
    }
}
struct GenericTextView:View{
变量字符串:字符串
初始值(u值:值){
string=“\(值)”
}
var body:一些观点{
文本(逐字:字符串)
}
}
这种方法还允许使用本地化键,只需删除
逐字:

struct GenericTextView: View {
    var string: String

    init<Value>(_ value: Value) {
        string = "\(value)"
    }

    var body: some View {
        Text(verbatim: string)
    }
}