通用 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: