在Swift

时间:2016-12-07 08:12:50

标签: ios regex swift uitextfield

我希望在Swift 2.x中这样做: 假设我在文本字段中输入文本。 - ' Apple iPhone http://www.apple.com'

我现在正在使用标签更新UIButton - Apple iPhone。当点击按钮启动' http://www.apple.com时,我想要IBAction。

我可以设置它,但我遇到麻烦的部分是 - 我如何解析Apple iPhone'和' http://www.apple.com'从文本字段中分离它们以便我可以用一些文本更新UIButton标签并使用URL来启动Safari?更具体地说,我希望能够检测到任何文本'然后是' http://',并始终使用文本更新标签,http使用网址启动浏览器。 谢谢你回答。

3 个答案:

答案 0 :(得分:6)

我在下面提到了这个问题的简单解决方案

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)

}

它会正确提取网址。

答案 1 :(得分:2)

您可以使用datadetactor在字符串上找到网址,试试这个

        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
        }

答案 2 :(得分:2)

您需要使用

  来自基础框架的

componentsSeparatedByString方法。

它返回一个字符串数组。

let array = inputField.text.componentsSeparatedByString("http://")

在您的情况下,它将在数组中有2个对象。第一个是标签文本,第二个是你想在webView中打开的URL。

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