2016-01-24 86 views
1

我實現一個功能,使用不同的符如格式化文本輸入時的字符串:動態串在格式化

​​

let formatString = "##/##" // For expiry month and year (mm/yy)` 

如果用戶開始輸入卡的詳細信息,如 self.cardNumberTextField = "44624523這應該使用指定的格式集格式化爲 4462 4523。卡到期日也應該發生。

任何人都可以幫助如何在Swift中實現這一點嗎?理想情況下,這種格式應該在您鍵入TextField時發生。

這個在操場
+0

你應該能夠給一個函數附加到一個事件,如鑰匙了在文本域。這可能會修改文本字段的內容以符合您的格式。它可能會檢查內容的格式,如果不正確,則在應用格式規則之前刪除所有非法字符。 –

+0

謝謝!你可以分享的任何樣品? –

+0

很有意思 - 我沒有Xcode在這臺機器上。這個問題仍然沒有答案,所以其他人可能會及時出現。 –

回答

0

播放...嘗試不同的輸入,數字少,一些字符等等

let format = "###/# ## XXX ## #### #(#)#" 
struct E:ErrorType { var txt = ""} 

func formated(str: String, formater: String) throws->String { 
    var s = str.characters.generate() 
    var res = "" 
    let f = formater.characters 
    try f.forEach { (c) ->() in 
     if c == Character("#") { 
      if let q = s.next() { 
       if let _ = Int(String(q)) { 
        res.append(q) 
       } else { 
        throw E(txt: "input must be a number!!!") 
       } 
      } else { 
       res.append(Character("#"))   } 
     } else { 
      res.append(c) 
     } 
    } 
    return res 
} 

do { 
    print(try formated("", formater: format)) 
    print(try formated("1234", formater: format)) 
    print(try formated("123412345678547", formater: format)) 
    print(try formated("123a12345678547", formater: format)) 
} catch let e { 
    print((e as? E)?.txt ?? "unknown error") 
} 

/* 
###/# ## XXX ## #### #(#)# 
123/4 ## XXX ## #### #(#)# 
123/4 12 XXX 34 5678 5(4)7 
input must be a number!!! 
*/ 
+0

感謝您的解決方案。它非常完美! :) –