私はSwiftで初めてregexとrangeを使用しようとしています。ユーザーがテキストフィールドに入力した文字が、推測しなければならない単語と一致するかどうかを確認したい。一致する場合は一致する文字がUILabelに表示されます(ハングマンを再生する方法と同様に、正しい文字を一度推測し、その文字が複数出現するとすべての出現が表示されます)。ボタンをクリックすると、以下のメソッドが呼び出されます。一致する文字を見つけて適切な場所に挿入するとうまくいきますが、ループの後にUILabelが更新されたときには、2番目の/最終ループの結果でラベルが更新されるだけです。どのようにしてループのすべての反復の結果を組み合わせることができますか?どんな助けもありがとう。コメントで述べたように、あなたスイフト - 範囲のすべての出現を取得するには?
func findLetter(displayedWord toSearchin: String, userInput toSearchFor: String) {
let ranges: [NSRange]
var labelUpdate = String()
do {
let regex = try NSRegularExpression(pattern: toSearchFor, options: [])
let displayedWord = toSearchin as NSString
let rangeOfSearch = NSMakeRange(0, displayedWord.length)
ranges = regex.matches(in: toSearchin, range: rangeOfSearch).map {$0.range}
let nsStringlabel = wordLabel.text as NSString?
for range in ranges {
labelUpdate = (nsStringlabel?.replacingCharacters(in: range, with: toSearchFor))!
print(labelUpdate)
//the word is lavenders, so this prints:
//___e_____
//______e__
// I want:
//___e__e__
}
DispatchQueue.main.async(execute: {
self.wordLabel.text = labelUpdate
})
}
catch {
ranges = []
}
}
'range for in ranges'ループでは、オリジナルの' nsStringlabel'を常に変更します... –