Как извлечь href из текста и сделать его кликабельным для сайта? - PullRequest
2 голосов
/ 13 января 2020

Я пытаюсь извлечь href из текста и сделать его кликабельным для веб-сайта.

Вот как выглядит моя попытка, но она не работает правильно:

    extension String {
        func findHref() -> [String] {
            var arr_hasStrings:[String] = []
            let regex = try? NSRegularExpression(pattern: "https[a-zA-Z0-9_\\p{Arabic}\\p{N}]*\\.com)", options: [])
            if let matches = regex?.matches(in: self, options:[], range:NSMakeRange(0, self.count)) {
                for match in matches {
                    arr_hasStrings.append(NSString(string: self).substring(with: NSRange(location:match.range.location, length: match.range.length )))
                }
            }
            return arr_hasStrings
        }

    }

и затем я использовал это так:

struct Details: View {
    var body: some View {
        VStack {

            ForEach( typedcomment.findHashtags(), id: \.self ){
                element in
                HStack{
                    Text(element).background(Color("bg"))
                }
            }
        }
    }

}

Это работало для https://stackoverflow.com, но не для такой ссылки: https://www.apple.com/de/macbook-pro-13/

1 Ответ

0 голосов
/ 13 января 2020

попробуйте это:

let input = "This is a test with the URL https://www.apple.com/de/macbook-pro-13/ to be detected."

func returnUrl(text: String) -> URL? {
    let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
    let matches = detector.matches(in: input, options: [], range: NSRange(location: 0, length: input.utf16.count))
    var url: URL?
    for match in matches {
        guard let range = Range(match.range, in: input) else { continue }
        let urlFound = input[range]
        url = URL(string: String(urlFound))
    }
    return url
}

из https://www.hackingwithswift.com/example-code/strings/how-to-detect-a-url-in-a-string-using-nsdatadetector

...