Search code examples
textswiftui

SwiftUI Text Markdown dynamic string not working


I want to dynamically deliver content and display hyperlinks, but it can’t be delivered dynamically and doesn’t work

let linkTitle = "Apple Link"
let linkURL = "http://www.apple.com"
let string = "[Apple Link](http://www.apple.com)"
            
Text(string)        // Not working

Text("[Apple Link](http://www.apple.com)")  // Working
            
Text("[\(linkTitle)](http://www.apple.com)")    // Working
            
Text("[\(linkTitle)](\(linkURL))")  // Not working
            

Solution

  • you can try this taken from: How to show HTML or Markdown in a SwiftUI Text? halfway down the page.

    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
            }
    
        }
    }