Saltar al contenido

¿Cómo verificar la validez de la URL en Swift?

Solución:

Si su objetivo es verificar si su aplicación puede abrir una URL, esto es lo que puede hacer. Aunque safari puede abrir la URL, es posible que el sitio web no exista o que esté inactivo.

`// Swift 5
 func verifyUrl (urlString: String?) -> Bool {
    if let urlString = urlString {
        if let url = NSURL(string: urlString) {
            return UIApplication.shared.canOpenURL(url as URL)
        }
    }
    return false
}
`

Como nota al margen, esto hace no compruebe si una URL es válida o está completa. Por ejemplo, una llamada que pasa “https: //” devuelve verdadero.

Rápido 4 elegante solución usando NSDataDetector:

extension String {
    var isValidURL: Bool {
        let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
        if let match = detector.firstMatch(in: self, options: [], range: NSRange(location: 0, length: self.utf16.count)) {
            // it is a link, if the match covers the whole string
            return match.range.length == self.utf16.count
        } else {
            return false
        }
    }
}

Uso:

let string = "https://www.fs.blog/2017/02/naval-ravikant-reading-decision-making/"
if string.isValidURL {
    // TODO
}

Razonamiento detrás del uso NSDataDetector en lugar de UIApplication.shared.canOpenURL:

Necesitaba un método que detectara si el usuario proporcionó una entrada que es una URL a algo. En muchos casos, los usuarios no incluyen el http:// ni https:// Esquema de URL en la URL que escriben, por ejemplo, en lugar de "http://www.google.com" ellos escribirían "www.google.com". Sin el esquema de URL, el UIApplication.shared.canOpenURL no reconocerá la URL y volverá false. NSDataDetector es, comparado con UIApplication.shared.canOpenURL, una herramienta bastante indulgente (como @AmitaiB mencionó en los comentarios), y puede detectar incluso URL sin la http:// esquema. De esta manera, puedo detectar una URL sin tener que intentar agregar el esquema cada vez que pruebo la cadena.

Nota al margen – SFSafariViewController solo puede abrir URL con http:///https://. Por lo tanto, si una URL detectada no tiene un esquema de URL especificado y desea abrir el enlace, deberá anteponer el esquema manualmente.

Para obtener una versión rápida 3 de la respuesta aceptada:

func verifyUrl(urlString: String?) -> Bool {
    if let urlString = urlString {
        if let url = URL(string: urlString) {
            return UIApplication.shared.canOpenURL(url)
        }
    }
    return false
}

O para una solución más Swifty:

func verifyUrl(urlString: String?) -> Bool {
    guard let urlString = urlString,
          let url = URL(string: urlString) else { 
        return false 
    }

    return UIApplication.shared.canOpenURL(url)
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *