Ios 当url包含%20“;

Ios 当url包含%20“;,ios,swift,swift4,nsdatadetector,Ios,Swift,Swift4,Nsdatadetector,使用Swift 4,我试图检测字符串中的URL。我目前正在使用此代码: 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&u

使用Swift 4,我试图检测字符串中的URL。我目前正在使用此代码:

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”替换空格

问题是我的代码在最后一行崩溃了。有没有更好的方法来格式化我的字符串

我找到了一个解决办法,将所有“%20”替换为,这很好,但我相信有更好的方法来处理它

检查这个

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)

                        }

您的代码编译并运行良好。您应该处理错误,而不是冒崩溃的危险。请注意,您应该使用urlink.utf16.count而不是urlink.count