Вот мой код для определения URL-адреса в тексте
let detector: NSDataDetector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
let matches: [NSTextCheckingResult] = detector.matches(in: message!, options: NSRegularExpression.MatchingOptions.init(rawValue: 0), range: NSMakeRange(0, (message?.count)!))
var url: URL?
for item in matches {
let match = item as NSTextCheckingResult
url = match.url
print(url!)
break
}
Однако этот код делает www.example.com как http://example.com
Я хочу получить этот URL-адрес как HTTPS, например https://example.com
Как я могу этого добиться?
@rmaddy www.example.com
Если строка - это просто URL-адрес, зачем возиться с детектором данных?
Потому что мне нужно получить имя сайта, изображение и описание из URL-адреса и отправить его в серверную часть чата.
Это не всегда URL





Нет API, чтобы указать NSDataDetector по умолчанию использовать схемы URL-адресов https, когда он находит URL-адрес без схемы.
Один из вариантов - обновить полученный URL самостоятельно:
let message = "www.example.com"
let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
let matches = detector.matches(in: message, range: NSRange(location: 0, length: message.utf16.count))
var url: URL?
for match in matches {
if match.resultType == .link {
url = match.url
if url?.scheme == "http" {
if var urlComps = URLComponents(url: url!, resolvingAgainstBaseURL: false) {
urlComps.scheme = "https"
url = urlComps.url
}
}
print(url)
break
}
}
Стоит отметить, что это также заменит URL-адрес явной схемой http со схемой https.
В чем ценность
message?