在 iOS 15 中选择退出 SwiftUI 文本 Markdown 支持
Opt out of SwiftUI Text Markdown Support in iOS 15
假设我想在 Text
中向用户显示以下文本:
3+4*5, 6*7+8
iOS15 中的新 SwiftUI 行为将在 Markdown 中呈现此字符串,使中间部分变为斜体。
我可以做到这一点并且它适用于 iOS 15:
Text("3+4\*5, 6\*7+8")
但是在iOS14上,由于没有Markdown解析会显示如下:
3+4\*5, 6\*7+8
有没有办法选择退出 Markdown 解析,这样我就可以使用单个字符串定位 iOS 15 和 14?
您可以使用 verbatim
初始值设定项创建 Text
:
Text(verbatim: “1*2 = 2*1”)
iOS13 支持此功能,将绕过所有转换和本地化。
https://developer.apple.com/documentation/swiftui/text/init(verbatim:)
取决于您使用的初始化程序,将取决于它是否会呈现 markdown。您不需要使用转义字符,只需以正确的方式设置字符串即可。
这里详细介绍了在有或没有本地化的情况下如何使用或不使用 markdown。
如果您使用默认值 Text()
并直接将字符串传递给它,那么它会假设您传递的是 LocalizedStringKey
并且它将本地化并使用记下来。您可以阅读更多 here.
如果您将字符串作为变量,那么 SwiftUI 将在您使用实际 String
的地方使用 Text()
初始值设定项,并且它将在没有本地化和降价的情况下呈现它.您可以阅读更多 here.
如果您使用 Text(verbatim:)
那么它将不使用本地化和降价。您可以阅读更多 here.
如果您想使用本地化但不使用 markdown,那么您需要使用 String(localized:)
创建一个 localizedString,然后将其传递给 Text()
。您可以阅读更多 here.
struct ContentView: View {
let stringVariable = "This is *markdown*"
let localizedString = String(localized: "This is *markdown*")
var body: some View {
VStack(spacing: 20) {
// 1
// Localization with markdown
// https://developer.apple.com/documentation/swiftui/text/init(_:tablename:bundle:comment:)
Text("This is *markdown*")
// 2
// No localization no markdown
// https://developer.apple.com/documentation/swiftui/text/init(_:)-9d1g4
Text(stringVariable)
// 3
// No localization no markdown
// https://developer.apple.com/documentation/swiftui/text/init(verbatim:)
Text(verbatim: "This is *markdown*")
// 4
// This is a localized string but no markdown
// https://developer.apple.com/documentation/swift/string/3867985-init
Text(localizedString)
}
}
}
上面的结果如下
假设我想在 Text
中向用户显示以下文本:
3+4*5, 6*7+8
iOS15 中的新 SwiftUI 行为将在 Markdown 中呈现此字符串,使中间部分变为斜体。
我可以做到这一点并且它适用于 iOS 15:
Text("3+4\*5, 6\*7+8")
但是在iOS14上,由于没有Markdown解析会显示如下:
3+4\*5, 6\*7+8
有没有办法选择退出 Markdown 解析,这样我就可以使用单个字符串定位 iOS 15 和 14?
您可以使用 verbatim
初始值设定项创建 Text
:
Text(verbatim: “1*2 = 2*1”)
iOS13 支持此功能,将绕过所有转换和本地化。
https://developer.apple.com/documentation/swiftui/text/init(verbatim:)
取决于您使用的初始化程序,将取决于它是否会呈现 markdown。您不需要使用转义字符,只需以正确的方式设置字符串即可。
这里详细介绍了在有或没有本地化的情况下如何使用或不使用 markdown。
如果您使用默认值
Text()
并直接将字符串传递给它,那么它会假设您传递的是LocalizedStringKey
并且它将本地化并使用记下来。您可以阅读更多 here.如果您将字符串作为变量,那么 SwiftUI 将在您使用实际
String
的地方使用Text()
初始值设定项,并且它将在没有本地化和降价的情况下呈现它.您可以阅读更多 here.如果您使用
Text(verbatim:)
那么它将不使用本地化和降价。您可以阅读更多 here.如果您想使用本地化但不使用 markdown,那么您需要使用
String(localized:)
创建一个 localizedString,然后将其传递给Text()
。您可以阅读更多 here.
struct ContentView: View {
let stringVariable = "This is *markdown*"
let localizedString = String(localized: "This is *markdown*")
var body: some View {
VStack(spacing: 20) {
// 1
// Localization with markdown
// https://developer.apple.com/documentation/swiftui/text/init(_:tablename:bundle:comment:)
Text("This is *markdown*")
// 2
// No localization no markdown
// https://developer.apple.com/documentation/swiftui/text/init(_:)-9d1g4
Text(stringVariable)
// 3
// No localization no markdown
// https://developer.apple.com/documentation/swiftui/text/init(verbatim:)
Text(verbatim: "This is *markdown*")
// 4
// This is a localized string but no markdown
// https://developer.apple.com/documentation/swift/string/3867985-init
Text(localizedString)
}
}
}
上面的结果如下