2016-12-07 53 views
0

我期待在Swift 2.x中執行此操作: 說我在文本字段中輸入文本。 - 'Apple iPhone http://www.apple.com'在Swift中從字符串中提取某些文本

我現在正在更新帶有標籤的UIButton - Apple iPhone。我點擊按鈕啓動'http://www.apple.com時,我想要IBAction。

我可以設置它,但我遇到麻煩的部分是 - 如何從文本字段解析'Apple iPhone'和'http://www.apple.com'並將它們分開,以便我可以用一些文本更新UIButton標籤並使用啓動Safari的URL?更具體地說,我希望能夠檢測到任何'文本',然後是'http://',並且始終使用文本更新標籤,並使用http啓動帶有url的瀏覽器。 感謝您的回答。

+0

可能的重複:http://stackoverflow.com/questions/27040924/nsrange-from-swift-range –

回答

2

你可以找到關於使用datadetactor字符串的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 
     } 
+0

謝謝。將研究這個解決方案並使用NSDataDetector。沒有意識到這一點。我將如何跟蹤URL前的其他文本,以便我可以另存文件? – NetCod

2

您需要使用從基礎架構的

componentsSeparatedByString方法。

它返回一個字符串數組。

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

在你的情況下,它將有一個數組中的2個對象。首先將是標籤文本,然後是您想要在webView中打開的URL。

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

這個解決方案看起來更簡單。將嘗試一下。謝謝。 – NetCod

+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) 

} 

它會提取正確的URL。

+0

似乎它是一個更好的解決方案來得到確切的url –

+0

我怎樣才能得到單獨的字符串在這裏單獨存儲的「蘋果iPhone」? – NetCod

+0

@NetCod'let appleIphone = text.substring(to:startIndex!)' – Mina