Transformando NSURL em NSString em Swift: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao problema: por que NSURL e NSString são tão importantes?

\n\n

Todo desenvolvedor iOS, mais cedo ou mais tarde, enfrenta a tarefa: você tem um objeto NSURL, mas precisa obter dele uma string comum — NSString (ou, no Swift moderno, simplesmente String). Parece simples, não? No entanto, existem várias armadilhas: desde a decodificação incorreta de caracteres até a perda de fragmentos da URL.

\n\n

No Stack Overflow, a pergunta "Convert an NSURL to an NSString" acumulou milhares de visualizações — é um verdadeiro clássico. Nós, da PythonLib, decidimos abordar o tópico a fundo para que você nunca mais perca tempo procurando soluções. Vamos lá!

\n\n

O que são NSURL e NSString em Swift?

\n\n

Antes de ir para o código, vamos lembrar rapidamente com o que estamos lidando.

\n\n

NSURL é um objeto que representa um Localizador Uniforme de Recursos (URL). Ele é capaz de dividir endereços em componentes: esquema, host, caminho, parâmetros e assim por diante. Em Swift, ele foi substituído pelo tipo nativo URL, mas NSURL ainda é amplamente usado em código legado, Core Foundation e ao trabalhar com bibliotecas Objective-C.

\n\n

NSString é uma string em Objective-C que, em Swift, é automaticamente convertida (bridged) para o tipo String. Portanto, quando dizemos "converter NSURL em NSString", na verdade obtemos um String ou NSString?.

\n\n

Principais formas de converter NSURL em NSString

\n\n

Vamos analisar três abordagens principais. Cada uma é adequada para cenários diferentes.

\n\n

1. Usando a propriedade absoluteString

\n\n

A maneira mais popular e simples. A propriedade absoluteString retorna a string completa da URL, incluindo todos os componentes.

\n\n
import Foundation\n\nlet url = NSURL(string: "https://pythonlib.ru/swift-guide?page=1&lang=ru")!\nlet urlString = url.absoluteString\n\nprint(urlString) // "https://pythonlib.ru/swift-guide?page=1&lang=ru"
\n\n

Importante: absoluteString retorna uma string que pode conter codificação percentual (percent-encoding). Por exemplo, espaços aparecerão como %20, e caracteres cirílicos como %D0%9F.

\n\n

2. Propriedade relativeString

\n\n

Se sua URL for relativa (não contém esquema e host), relativeString retornará apenas a parte relativa.

\n\n
let baseURL = NSURL(string: "https://pythonlib.ru")!\nlet relativeURL = NSURL(string: "swift-guide", relativeTo: baseURL)!\n\nlet absolute = relativeURL.absoluteString\nlet relative = relativeURL.relativeString\n\nprint(absolute) // "https://pythonlib.ru/swift-guide"\nprint(relative) // "/swift-guide"
\n\n

Este método é especialmente útil quando você trabalha com URLs base e caminhos relativos.

\n\n

3. Analisando manualmente os componentes da URL

\n\n

Às vezes, você não precisa da URL completa, mas apenas de uma parte: caminho, host ou parâmetros. Para isso, use as propriedades de NSURLComponents ou acesse diretamente NSURL.

\n\n
let url = NSURL(string: "https://pythonlib.ru/ios/guide?query=swift#section1")!\n\nlet scheme = url.scheme ?? ""\nlet host = url.host ?? ""\nlet path = url.path ?? ""\nlet query = url.query ?? ""\nlet fragment = url.fragment ?? ""\n\nprint("Esquema: \\(scheme)")\nprint("Host: \\(host)")\nprint("Caminho: \\(path)")\nprint("Parâmetros: \\(query)")\nprint("Âncora: \\(fragment)")
\n\n

Esta abordagem oferece controle máximo sobre o que você está extraindo.

\n\n

Erros comuns e como evitá-los

\n\n

Até desenvolvedores experientes às vezes tropeçam em coisas simples. Aqui estão três problemas mais frequentes ao converter NSURL para NSString.

\n\n

Erro 1: Esquecer a opcionalidade

\n\n

NSURL(string:) retorna um tipo opcional NSURL?. Se a string

Blogs

Book Recommendations