struct DownloadButtons { struct Item { let filePath: String let text: String let downloadFileName: String? } let items: [Item] init(items: [Item]) { self.items = items } var content: String { var result = "

" for item in items { addButton(of: item, to: &result) } result += "

" return result } private func addButton(of item: Item, to result: inout String) { let downloadText = item.downloadFileName.map { " download='\($0)'" } ?? "" result += "" result += "\(item.text)" result += "" } }