2016-12-07 29 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

あなたはFoundationフレームワークから

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

「Apple iPhone」を別の文字列で別々に格納するにはどうすればよいですか? – NetCod

+0

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

関連する問題