2016-09-18 15 views
-1

パラメータとして文字列と範囲をとるスウィフト関数を記述しました。範囲が文字列に対して有効であることを確認するにはどうすればよいですか?Swift:範囲が指定された文字列に対して有効かどうかを確認する方法

編集:スウィフト3で無意味な例

func foo(text: String, range: Range<String.Index>) ->String? { 
    // what can I do here to ensure valid range 
    guard *is valid range for text* else { 
    return nil 
    } 
    return text[range] 
} 

var str = "Hello, world" 
let range = str.rangeOfString("world") 
let str2 = "short" 
let text = foo(str2, range: range!) 
+0

あなたが書いたコードを表示してください。 –

+0

あなたのメソッドを呼び出す前にrangeがnilと等しくないかどうかを確認するか、letを使って安全に範囲を取得してください。 –

+0

私は@LeoDabusに同意します。 'range'が' nil'でなければ 'str'に対して有効です。別の言い方をすると、「世界」が存在しない場合、「範囲」は「無」になります。他に何を知りたいですか? – matt

答えて

2

、これは簡単です:ちょうど、文字列の文字の範囲を取得し、それはあなたの任意の範囲が含まれているかどうかを確認するためにcontainsを呼び出します。

+0

解決しました説明した概念を使用して問題を解決します(下記参照)。ありがとうございました – crackles

0

私は、Swift 2.2を使用しているため、残念ながらMattのソリューションをテストできませんでした。しかし、彼のアイデアを使用して私は思いつきました...

func foo(text: String, range: Range<String.Index>) -> String? { 
    let r = text.startIndex..<text.endIndex 
    if r.contains(range.startIndex) && r.contains(range.endIndex) { 
    return text[range] 
    } else { 
    return nil 
    } 
} 

開始と終了のインデックスがokであれば、範囲全体でなければなりません。

関連する問題