You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift:如何在字符串/JSON内通过符号实现文本加粗、斜体?

当然有办法实现这个需求啦!不过直接像你写的textLabel.text = "**my bold text** or _italic_"这样给控件赋值,系统默认是不会识别**或者_这些Markdown标记的,得做些额外处理才能实现加粗、斜体的效果。下面分不同场景给你具体方案:

1. 原生平台实现方式

iOS/macOS(Swift)

如果你的系统版本在iOS 15+、macOS 12+以上,系统自带了Markdown解析能力,直接用NSAttributedString就能搞定:

let markdownText = "**my bold text** or _italic_"
do {
    let attributedString = try NSAttributedString(
        markdown: markdownText,
        options: .init(interpretedSyntax: .inlineOnlyPreservingWhitespace)
    )
    textLabel.attributedText = attributedString
} catch {
    print("解析失败: \(error)")
}

要是需要兼容更低版本,要么手动构建富文本,要么找个轻量的第三方Markdown解析库来转换字符串。

Android(Kotlin)

Android可以用SpannableString手动设置样式,或者借助第三方库解析Markdown:

// 手动设置样式的方式
val rawText = "my bold text or italic"
val spannable = SpannableString(rawText)
// 给"my bold text"设置加粗
spannable.setSpan(StyleSpan(Typeface.BOLD), 0, 12, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
// 给"italic"设置斜体
spannable.setSpan(StyleSpan(Typeface.ITALIC), 15, 21, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
textView.text = spannable

// 用Markwon库解析Markdown(需要先在gradle里添加依赖)
Markwon.create(context).setMarkdown(textView, "**my bold text** or _italic_")
2. 跨平台框架方案

Flutter

Flutter里可以用RichText手动构建富文本,或者用flutter_markdown库直接解析:

// 手动构建富文本
RichText(
  text: const TextSpan(
    style: TextStyle(color: Colors.black),
    children: [
      TextSpan(text: "my bold text ", style: TextStyle(fontWeight: FontWeight.bold)),
      TextSpan(text: "or "),
      TextSpan(text: "italic", style: TextStyle(fontStyle: FontStyle.italic)),
    ],
  ),
)

// 用flutter_markdown解析Markdown字符串
MarkdownBody(data: "**my bold text** or _italic_")

React Native

可以嵌套Text组件实现样式,或者用Markdown解析库:

// 嵌套Text组件的方式
<Text>
  <Text style={{fontWeight: 'bold'}}>my bold text</Text>
  {' or '}
  <Text style={{fontStyle: 'italic'}}>italic</Text>
</Text>

// 用react-native-markdown-display库解析
<Markdown>{'**my bold text** or _italic_'}</Markdown>
3. JSON字符串的处理场景

如果是从后端返回的JSON里拿到带Markdown标记的字符串,只需要在客户端/前端按照上面对应的平台方案,把字符串解析成富文本后再显示就可以了。

总的来说,系统默认的文本控件不会自动解析**、_这类符号,你需要通过原生富文本API或者第三方Markdown解析库,把带标记的字符串转换成可显示的富文本内容。

内容的提问来源于stack exchange,提问作者user291334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:10:16