2017-09-26 5 views
0

文字列は(495)_-___-____のようになります。それは電話番号のマスクです。私は、ライブラリは、テキストフィールドのためのマスクを形成するために、特定のルールを持っているInputMask文字列を分割して文字ごとに特定のアクションを実行するSwift

という名前librayを持っています。だから、私はいくつかの正しいフォーマットになるだろう{495[0]_[0][0][0]_[0][0][0]にマスクの上に変換する必要があります。

私はマップのような関数でその点を達成することができますか?文字列の配列に文字列(495)_-___-____を分割するだけでいいです。その文字がユーザーがテキストフィールドに文字を配置するときに配置される "_"または "*"と等しい場合は、単純に[0]に置き換えます。他の文字は記号をそのまま残すべきです。アレイに、この分割文字列を実行し、マップ機能を使用して新しいアレイを形成する方法

?ここで

+0

その文字の上にこの文字列を反復処理しながら、あなただけの新しい文字列を作ることができます。文字に遭遇したときに、あなたのルールを適用することができます – prabodhprakash

+0

最初にアンバランスな '{'がありますか? – Sweeper

+0

事実、 '_'の位置が一定であれば、その位置にマスクをかけるだけかもしれません。 – prabodhprakash

答えて

1

は、ソリューションです:

let mask = "(495)_-___-____" 
// use mask.map in swift 4 
let strings: [String] = mask.characters.map { 
    char in 
    if char == "_" { 
     return "[0]" 
    } else if char == "-" { 
     return "_" 
    } else { 
     return char.description 
    } 
} 


let finalResult = "{" + strings.joined() 

あなたが見ることができるように、コードは非常に簡単です。 mapクロージャー内のコードはかなり長いので、ループはおそらくもっとよく見えるでしょう(IMO)。ここで

は、高次の機能を使用していない別の解決策ですが、IMOは簡単です:

"{" + mask.replacingOccurrences(of: "_", with: "[0]") 
    .replacingOccurrences(of: "-", with: "_") 
+0

がmap' 'によって解決する問題を解決するための絶対的な基準ではない場合、簡単な' for'ループを使用して、それを解決することは、より理にかなって、ことで合意したことを行うことができれば私が尋ねます。 – prabodhprakash

+0

@prabodhprakashはい私は同意するが、私はそれが仕事のおかげ@Sweeper使用マップ –

+0

によってsimplierときれいにそれを作ることができると思いますが、あなたがそれを習得すれば、それはあなたの時間を節約になると少なくなりますので、私はまだ、高次の機能を備えたソリューションをしたいですコード。 –

関連する問題