我想动态传送内容并显示超链接,但它不能动态传送并且不能工作
\nlet linkTitle = "Apple Link"\nlet linkURL = "http://www.apple.com"\nlet string = "[Apple Link](http://www.apple.com)"\n \nText(string) // Not working\n\nText("[Apple Link](http://www.apple.com)") // Working\n \nText("[\\(linkTitle)](http://www.apple.com)") // Working\n \nText("[\\(linkTitle)](\\(linkURL))") // Not working\n \n
Run Code Online (Sandbox Code Playgroud)\n
kga*_*dis 22
将字符串包裹在AttributedString(markdown: my_string_here)
:
let string: String = "[Apple Link](http://www.apple.com)"
Text(try! AttributedString(markdown: string))
Run Code Online (Sandbox Code Playgroud)
extension String {
func toMarkdown() -> AttributedString {
do {
return try AttributedString(markdown: self)
} catch {
print("Error parsing Markdown for string \(self): \(error)")
return AttributedString(self)
}
}
}
Run Code Online (Sandbox Code Playgroud)
SwiftUIText
有多个初始化器。
为了String
:
init<S>(_ content: S) where S : StringProtocol
Run Code Online (Sandbox Code Playgroud)
init(_ attributedContent: AttributedString)
Run Code Online (Sandbox Code Playgroud)
当你声明一个静态字符串时,Swift 能够猜测其意图是否是使用String
or AttributedString
(Markdown)。但是,当您使用动态字符串时,Swift 需要帮助来确定您的意图。
因此,对于动态字符串,您必须将您显式转换String
为AttributedString
:
try! AttributedString(markdown: string)
Run Code Online (Sandbox Code Playgroud)
Raj*_*han 15
在文本中添加另一个.init
。
struct ContentView: View {
let linkTitle = "Apple Link"
let linkURL = "http://www.apple.com"
let string = "[Apple Link](http://www.apple.com)"
var body: some View {
Text(.init(string)) // <== Here!
Text("[Apple Link](http://www.apple.com)") // Working
Text("[\(linkTitle)](http://www.apple.com)") // Working
Text(.init("[\(linkTitle)](\(linkURL))")) // <== Here!
}
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下内容:How to show HTML or Markdown in a SwiftUI Text? 页面的中间位置。
extension String {
func markdownToAttributed() -> AttributedString {
do {
return try AttributedString(markdown: self) /// convert to AttributedString
} catch {
return AttributedString("Error parsing markdown: \(error)")
}
}
}
struct ContentView: View {
let linkTitle = "Apple Link"
let linkURL = "https://www.apple.com"
let string = "[Apple Link](https://www.apple.com)"
@State var textWithMarkdown = "[Apple Link](https://www.apple.com)"
var body: some View {
VStack {
Text(textWithMarkdown.markdownToAttributed()) // <-- this works
Text(string) // Not working
Text("[Apple Link](http://www.apple.com)") // Working
Text("[\(linkTitle)](http://www.apple.com)") // Working
Text("[\(linkTitle)](\(linkURL))") // Not working
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5286 次 |
最近记录: |