ShareLink para Swift: guia completo com exemplos práticos
ShareLink é uma estrutura nativa do framework SwiftUI, projetada para criar botões "Compartilhar" em aplicativos Swift. Ela oferece uma interface simples e intuitiva para integrar a folha de compartilhamento do sistema (UIActivityViewController) sem a necessidade de escrever código UIKit complexo. A biblioteca foi introduzida no iOS 16, macOS 13, tvOS 16 e watchOS 9, e desde então se tornou a forma padrão de implementar o compartilhamento de conteúdo em aplicativos SwiftUI modernos.
Por que usar o ShareLink? No mundo atual, os usuários compartilham conteúdo constantemente: links, fotos, textos, arquivos. Implementar o compartilhamento manualmente exige criar um UIActivityViewController, configurar delegates e lidar com diferentes tipos de dados. O ShareLink assume todo esse trabalho, fornecendo um componente SwiftUI pronto que se adapta automaticamente à plataforma e às configurações do sistema. Isso não apenas acelera o desenvolvimento, mas também garante uma experiência de usuário consistente em todos os dispositivos Apple.
A biblioteca é ideal para: aplicativos sociais (compartilhar posts), agregadores de notícias (compartilhar artigos), editores de fotos (exportar imagens), mensageiros (enviar arquivos) e qualquer outro aplicativo que precise da função "Compartilhar". O ShareLink suporta todos os tipos de dados padrão: strings, URLs, imagens, arquivos e itens personalizados que estejam em conformidade com o protocolo Transferable.
Instalação
O ShareLink faz parte do framework SwiftUI, portanto não requer instalação separada através de gerenciadores de pacotes. Para usá-lo, basta importar o SwiftUI no seu projeto:
import SwiftUI
Requisitos mínimos:
- iOS 16.0+ / macOS 13.0+ / tvOS 16.0+ / watchOS 9.0+
- Xcode 14.0+
- Swift 5.7+
Se você estiver usando versões mais antigas do iOS, precisará usar o UIActivityViewController diretamente através do UIViewRepresentable.
Início rápido
A maneira mais simples de usar o ShareLink é passar uma string ou URL. Veja um exemplo mínimo funcional:
import SwiftUI
struct ContentView: View {
var body: some View {
ShareLink(item: URL(string: "https://pythonlib.ru")!) {
Label("Compartilhar link", systemImage: "square.and.arrow.up")
}
.padding()
}
}
Este código cria um botão com o ícone "Compartilhar". Ao tocar, a folha de compartilhamento do sistema é aberta, permitindo que o usuário escolha o aplicativo para enviar o link.
Métodos e classes principais
O ShareLink oferece vários inicializadores e modificadores para personalização. Veja 8 recursos essenciais.
1. ShareLink(item:)
Assinatura: init(item: T, subject: Text? = nil, message: Text? = nil, @ViewBuilder label: () -> Label)
O que faz: Cria um botão de compartilhamento para um único item. O parâmetro item pode ser uma string, URL, imagem ou qualquer tipo que esteja em conformidade com o protocolo Transferable.
ShareLink(item: "Olá, mundo!") {
Text("Compartilhar texto")
}
2. ShareLink(items:)
Assinatura: init(items: [T], subject: Text? = nil, message: Text? = nil, @ViewBuilder label: () -> Label)
O que faz: Permite compartilhar vários itens ao mesmo tempo (por exemplo, uma matriz de fotos).
let images = [UIImage(named: "photo1")!, UIImage(named: "photo2")!]
ShareLink(items: images) {
Label("Compartilhar fotos", systemImage: "photo.on.rectangle")
}
3. ShareLink(item:preview:)
Assinatura: init(item: T, preview: SharePreview<T>, @ViewBuilder label: () -> Label)
O que faz: Cria um botão de compartilhamento com uma prévia personalizada do conteúdo, exibindo uma imagem e um título no sistema de compartilhamento.
ShareLink(item: URL(string: "https://exemplo.com")!, preview: SharePreview("Meu Site", image: Image(systemName: "globe"))) {
Label("Compartilhar site", systemImage: "link")
}
4. ShareLink(item:subject:message:)
Assinatura: init(item: T, subject: Text, message: Text, @ViewBuilder label: () -> Label)
O que faz: Permite definir o assunto e a mensagem padrão que aparecerão na folha de compartilhamento, facilitando o preenchimento automático em aplicativos de e-mail ou mensagens.
ShareLink(item: "Conteúdo interessante", subject: Text("Veja isto!"), message: Text("Recomendo este conteúdo.")) {
Text("Compartilhar")
}
5. ShareLink(item:preview:subject:message:)
Assinatura: init(item: T, preview: SharePreview<T>, subject: Text? = nil, message: Text? = nil, @ViewBuilder label: () -> Label)
O que faz: Combina todos os recursos anteriores: prévia personalizada, assunto e mensagem, oferecendo o máximo controle sobre a experiência de compartilhamento.
ShareLink(item: URL(string: "https://exemplo.com/artigo")!, preview: SharePreview("Artigo Incrível", image: Image("thumbnail")), subject: Text("Leia este artigo"), message: Text("Achei muito interessante!")) {
Label("Compartilhar artigo", systemImage: "doc.text")
}
6. Modificador .shareLink(isPresented:)
Assinatura: func shareLink(isPresented: Binding<Bool>, item: T?, subject: Text? = nil, message: Text? = nil) -> some View
O que faz: Exibe a folha de compartilhamento programaticamente, controlada por um estado booleano. Útil para acionar o compartilhamento a partir de gestos ou ações personalizadas.
@State private var isSharing = false
var body: some View {
Button("Compartilhar") {
isSharing = true
}
.shareLink(isPresented: $isSharing, item: "Texto para compartilhar")
}
7. Compartilhamento de imagens com Transferable
O que faz: Permite compartilhar imagens de forma nativa, desde que o tipo esteja em conformidade com o protocolo Transferable. UIImage já implementa esse protocolo automaticamente.
let image = UIImage(named: "foto")!
ShareLink(item: image, preview: SharePreview("Minha Foto", image: Image(uiImage: image))) {
Label("Compartilhar imagem", systemImage: "photo")
}
8. Compartilhamento de arquivos personalizados
O que faz: Permite compartilhar arquivos personalizados, como PDFs ou documentos, usando o tipo URL que aponte para o arquivo local.
if let fileURL = Bundle.main.url(forResource: "documento", withExtension: "pdf") {
ShareLink(item: fileURL, preview: SharePreview("Documento PDF")) {
Label("Compartilhar PDF", systemImage: "doc")
}
}
Conclusão
O ShareLink é uma ferramenta poderosa e essencial no ecossistema SwiftUI. Ele simplifica drasticamente a implementação do compartilhamento de conteúdo, eliminando a necessidade de código UIKit complexo. Com suporte a diversos tipos de dados, personalização de prévias e controle programático, o ShareLink se adapta a qualquer cenário de compartilhamento. Se você está desenvolvendo para iOS 16 ou versões superiores, esta é definitivamente a abordagem recomendada para implementar a funcionalidade "Compartilhar" no seu aplicativo.