SwiftUI中Text("")和Text(verbatim: "")初始化器的区别

14

我一直在学习苹果的SwiftUI教程。在学习过程中,我经常使用以下初始化器创建Text对象:

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

现在,在系列教程的第五节中,我遇到了以下对Text的使用:

Text(verbatim: "")

这个界面上的描述与其他初始化器相同:

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

问题

什么是两个初始化器,它们有何不同/在什么情况下应该使用哪一个?

2个回答

23

Text(verbatim: )以原样返回文本 - 因此有了verbatim参数名称。

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

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

如果不是,它将直接打印文本verbatim


有趣的发现!它是如何进行本地化的尝试呢?它是否只是在任何localizable.strings文件中搜索键值? - LinusGeffarth
1
@LinusGeffarth 是的,它会检查当前的语言环境,然后获取相应的 Localizable.strings 文件。 - Matteo Pacini

7
如WWDC19介绍的一样,SwiftUI默认试图为您处理一整套良好平台行为,在最终用户认为是应用程序基本要求但会使开发人员的工作变得复杂的行为中进行处理。
本地化是其中之一 - Text初始化程序自动完成正确的操作。例如:
- Text(“Some Text”)将字符串文字视为本地化,因为静态定义的文本几乎总是打算用作UI文本。 - 对于Text(“\ (items.count) items”),它同样正确地本地化格式字符串并插入内插值。 - Text(item.name)在运行时动态提供不同的字符串,因此文本几乎肯定是“内容”,无论区域设置如何都保持不变(因为来自用户、程序外部等)。
这意味着99%的时间,您只需进行最自然、简洁的调用来设置您的 UI,就可以得到一个已准备好进行本地化的应用程序,而不需要像其他 UI 框架一样返回并更改大量代码。
如果您的应用程序有不符合这些假设的部分,则Text(verbatim:)和Text(_:tableName:bundle:comment:)允许您制作非本地化的静态文本和本地化的编程文本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接