2017-11-29 4 views
-2

스위프트 4를 사용하면 문자열 내에서 URL을 검색하려고합니다. 나는 현재이 코드를 사용하고 있습니다 : 당신이 볼 수 있듯이, 내 캐릭터가 이미 "% 20"로 공간을 대체 할 포맷URL에 "% 20"이 포함되어 있으면 NSDataDetector에서 충돌이 발생합니다.

let urlLink : String = "https://skift.com/2017/11/27/8-financial-themes-shaping-the-hotel-industry-in-2018-and-beyond/?utm_campaign=Early%20Time%20Zone%20-%20Skift%20Daily%20Newsletter&utm_source=hs_email&utm_medium=email&utm_content=58793637&_hsenc=p2ANqtz-8cG4tZKNEv7E1FRrVn-T-qwKRpJKx8JQBAgF7priRL78ToAX49w4e1R2sdCxSI9lik4NXXkW241XSN3UkVxVrjVjRu7x0N8i-txn8F0Jxnhgej3OI&_hsmi=58793637" 
let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) 
let matches = detector.matches(in: urlLink, options: [], range: NSRange(location: 0, length: urlLink.count)) 

.

문제는 내 코드가 마지막 줄에서 충돌하고 있다는 것입니다. 내 문자열을 포맷하는 더 좋은 방법이 있습니까?

나는 잘 작동 모든 "% 20"에 의해 ""을 대체하여 해결 방법을 찾았지만, 나는 그것을 처리하는 더 좋은 방법이 있는지입니다.

+0

코드는 컴파일과 잘 실행됩니다. 충돌을 일으키기보다는 오류를 처리해야합니다. – vadian

+0

urlLink.count 대신 urlLink.utf16.count를 사용해야합니다. –

답변

0

확인이 하나 개

let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) 
         let matches = detector.matches(in: input!, options: [], range: NSMakeRange(0, (input?.characters.count)!)) 
         var url = String() 
         for match in matches 

         { 
          url = (input! as NSString).substring(with: match.range) 

         }