我正在使用不同的说明符实现一个在文本输入过程中格式化字符串的功能,例如:
let formatString = "#### #### #### #### ###" // For card number format
或
let formatString = "##/##" // For expiry month and year (mm/yy)`
如果用户开始输入卡片详细信息,例如
self.cardNumberTextField = "44624523
这应格式化为
4462 4523
使用指定的格式集。卡过期日期也应如此。
任何人都可以帮助解决如何在Swift中实现这一点吗?理想情况下,这种格式化应该在TextField中键入时发生。
答案 0 :(得分: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!!!
*/