首页 > 解决方案 > 通用 SwiftUI 视图的字符串推理协议

问题描述

我遇到了一个问题,如果有的话,存在哪些协议来指定 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

标签: genericsviewswiftuiprotocolsinference

解决方案


这取决于您是尝试显示传递的值,还是尝试显示传递的键的本地化字符串。看起来您正在尝试显示传递的值,但您的代码正在调用本地化键的初始化程序。您可能想使用Text(verbatim:)

struct GenericTextView<A>: View {
    var printableInstance: A

    var body: some View {
        Text(verbatim: "\(printableInstance)")
    }
}

也就是说,我会避免那样写。没有理由以这种方式重新字符串化值。您可以将其字符串化一次并避免泛型:

struct GenericTextView: View {
    var string: String

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

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

这种方法还允许本地化键,只需删除verbatim:.


推荐阅读