Ios 从Swift中的字符串中提取特定文本

Ios 从Swift中的字符串中提取特定文本,ios,regex,swift,uitextfield,Ios,Regex,Swift,Uitextfield,我希望在Swift 2.x中实现这一点: 假设我在文本字段中输入文本。-'苹果iPhone' 我现在正在更新一个标签为苹果iPhone的UIButton。当点击按钮启动时,我想要iAction 我可以设置它,但我遇到的问题是——如何从文本字段解析“Apple iPhone”和“”,并将它们分开,以便用一些文本更新UIButton标签,并使用URL启动Safari?更具体地说,我希望能够检测任何后跟“http://”的“文本”,并始终使用文本更新标签,使用http启动带有url的浏览器。 感谢您的

我希望在Swift 2.x中实现这一点: 假设我在文本字段中输入文本。-'苹果iPhone'

我现在正在更新一个标签为苹果iPhone的UIButton。当点击按钮启动时,我想要iAction

我可以设置它,但我遇到的问题是——如何从文本字段解析“Apple iPhone”和“”,并将它们分开,以便用一些文本更新UIButton标签,并使用URL启动Safari?更具体地说,我希望能够检测任何后跟“http://”的“文本”,并始终使用文本更新标签,使用http启动带有url的浏览器。
感谢您的回答。

您可以使用DataDeActor在字符串上找到url,请尝试以下操作

        let types: NSTextCheckingType = .Link
        let detector = try? NSDataDetector(types: types.rawValue)
        let matches = detector!.matchesInString("your_string", options: .ReportCompletion, range: NSMakeRange(0,ActivityText!.characters.count))
        if matches.count > 0 {
            let urlResult = matches.first
            let url = urlResult?.URL

            //now open this url
        }
你需要使用

组件从基础框架中分离Bype方法。 它返回一个字符串数组

let array = inputField.text.componentsSeparatedByString("http://")
在您的例子中,它将在一个数组中包含两个对象。第一个是标签文本,第二个是要在webView中打开的URL

if array.count>=2 {
    let text = array[0]
    let url = array[1]
}

正如我在下面提到的,这个问题有一个简单的解决方案

var x = "Apple iPhone http://www.apple.com"

@IBAction func click(_ sender: UIButton) {
    let url = x.substring(from: x.range(of: "http")!.lowerBound)
    UIApplication.shared.openURL(NSURL(string: url)! as URL)
}
但是这个解决方案和所有给定的解决方案都有一个问题, 如果您有如下字符串:
var x=“Apple iPhone”http://www.apple.com wwdc“
您无法获得正确的结果。 通用解决方案可以如下所示:

@IBAction func click(_ sender: UIButton) {
    var text = "Apple iPhone http://www.apple.com wwwdc"

    let startIndex = text.range(of: "http")?.lowerBound
    var startString = text.substring(from: startIndex!)
    let endIndex = startString.range(of: " ")!.lowerBound
    var url = startString.substring(to: endIndex)

    UIApplication.shared.openURL(NSURL(string: url)! as URL)

}

它将正确提取url。

可能重复:谢谢。将研究此解决方案并使用NSDataDetector。我不知道。如何在url之前跟踪其余文本,以便单独保存?此解决方案似乎更简单。我会试试看。谢谢。这不是一个好的解决方案,因为它只适用于字符串的这种情况。如果要获得准确的url,这是一个更好的解决方案。如何将“Apple iPhone”单独存储在单独的字符串中?@NetCod
let appleIphone=text.substring(to:startIndex!)