Как получить индекс текста в строке в Swift 4? - PullRequest
2 голосов
/ 27 февраля 2020

Есть строка с сервера:

"Please review the work schedule for personnel associated with this device\nhttps://test.abcdxyz.com/media?q=kp97k73a9omm"

Мне нужно извлечь URL из этой строки:

"https://test.abcdxyz.com/media?q=kp97k73a9omm"

Как я могу сделать это в swift 4 ??

Что я нашел после прочтения о String:

if msg.contains("https://") {
 let x = msg.range(of: "https://")?.lowerBound
 let str = msg.substring(from: x!)
            print(str)
}

NSDataDetecter также является отличным решением для этого. Какой из них более надежен в этом случае ??

Ответы [ 2 ]

4 голосов
/ 27 февраля 2020

Интеллектуальное решение - NSDataDetector

let string = "Please review the work schedule for personnel associated with this device\nhttps://test.abcdxyz.com/media?q=kp97k73a9omm"

let types: NSTextCheckingResult.CheckingType = [.link]
if let detector = try? NSDataDetector(types: types.rawValue),
   let link = detector.firstMatch(in: string, range: NSRange(string.startIndex..., in: string)) {
    print(link.url!)
}

Вам не нужно создавать Range из совпадения для извлечения подстроки, есть удобное url собственность.

1 голос
/ 27 февраля 2020

Вы можете использовать NSDataDetector, что упрощает обнаружение URL-адресов внутри строки

let inputString = "Please review the work schedule for personnel associated with this device\nhttps://test.abcdxyz.com/media?q=kp97k73a9omm"

let urlDetector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
let getMatches = urlDetector.matches(in: inputString, options: [], range: NSRange(location: 0, length: inputString.utf16.count))

for match in getMatches {
    guard let range = Range(match.range, in: inputString) else { continue }
    let url = inputString[range]
    print(url)
}

Подробнее: https://www.hackingwithswift.com/example-code/strings/how-to-detect-a-url-in-a-string-using-nsdatadetector

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...