【问题标题】:Difference between Text("") and Text(verbatim: "") initializers in SwiftUISwiftUI 中 Text("") 和 Text(verbatim: "") 初始化程序之间的区别
【发布时间】:2023-03-07 04:05:01
【问题描述】:

我一直在关注 Apple 的 SwiftUI tutorials。在此过程中,我经常将 Text 对象与以下初始化程序一起使用:

/// Creates an instance that displays `content` verbatim.
public init<S>(_ content: S) where S : StringProtocol

现在,在系列的fifth tutorial 中,我遇到了Text 的以下用法:

Text(verbatim: "")

接口中的描述与其他初始化器相同:

/// Creates an instance that displays `content` verbatim.
public init(verbatim content: String)

问题

这两个初始化器的用途是什么,它们有何不同/我什么时候使用哪个?

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    Text(verbatim: ) 返回文本原样 - 因此是逐字参数名称。

    Text(:_) 检查参数是否为本地化键

    如果是,则返回对应的本地化字符串。

    它不是,它会打印文本逐字

    【讨论】:

    • 有趣的发现!它如何尝试对其进行本地化?它只是在任何 localizable.strings 文件中搜索密钥吗?
    • @LinusGeffarth 是的,它检查当前语言环境并获取相应的Localizable.strings 文件。
    【解决方案2】:

    正如在介绍它的一些 WWDC19 会议中指出的那样,SwiftUI 会默认为您处理一大堆良好的平台公民行为,最终用户认为这些行为是应用程序的基本要求,但往往会使工作复杂化对于开发人员。

    本地化就是其中之一——Text 初始化器会自动做正确的事情。例子:

    • Text(“Some Text”) 将字符串文字视为已本地化,因为静态定义的文本几乎总是打算作为 UI 文本。
    • Text(“\(items.count) items”) 同上,它正确本地化格式字符串并插入插值。
    • Text(item.name) 在运行时动态提供不同的字符串,因此文本几乎可以肯定是“内容”,无论语言环境如何(因为它来自用户、来自程序外部等)都保持不变。

    这意味着在 99% 的情况下,您只需进行最自然、简洁的调用来设置您的 UI,并最终获得一个可以本地化的应用,而无需返回并更改一堆代码使用其他 UI 框架的方式。

    如果您的应用程序有不符合这些假设的位,Text(verbatim:)Text(_:tableName:bundle:comment:) 让您可以制作非本地化的静态文本和本地化的编程文本。

    【讨论】:

      猜你喜欢
      • 2016-09-17
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      相关资源
      最近更新 更多