Swift 根据字符串的长度,每N个字符格式化一个字符串
各位,我需要根据字符串的长度逐字符实时更新字符串/文本字段 例如:如果用户插入43041058,则应更改为4.304.105-8, 否则,如果用户再插入一个数字(总共12个字符)430410582,则应更新为43.041.058-2 实时执行,例如:Swift 根据字符串的长度,每N个字符格式化一个字符串,swift,Swift,各位,我需要根据字符串的长度逐字符实时更新字符串/文本字段 例如:如果用户插入43041058,则应更改为4.304.105-8, 否则,如果用户再插入一个数字(总共12个字符)430410582,则应更新为43.041.058-2 实时执行,例如: Step | User Input 1 | 4. 2 | 4.3 3 | 4.30 4 | 4.304. 5 | 4.304.1 6 | 4.304.10 7 | 4.304.105 8 | 4.304.105-8 9 | 43.041.058-2
Step | User Input
1 | 4.
2 | 4.3
3 | 4.30
4 | 4.304.
5 | 4.304.1
6 | 4.304.10
7 | 4.304.105
8 | 4.304.105-8
9 | 43.041.058-2
重要的是,文本字段会为每个按下的字符进行自我更新,我的壁橱可以使它只在12个位置工作,而不是11个位置
override func viewDidLoad() {
super.viewDidLoad()
rutFormatter()
}
func rutFormatter() {
textRut.addTarget(self, action: #selector(VCLogin.textFieldDidChange(_:)), for: UIControl.Event.editingChanged)
}
@objc func textFieldDidChange(_ textField: UITextField) {
var newRut = String()
for (index, character) in (textField.text?.enumerated())! {
if index % 2 == 0 {
if index != 0 && index % 2 == 0 {
switch index {
case 2:
if character != "." {
newRut.append(".")
}
case 10:
if character != "-" {
newRut.append("-")
}
default:
print("Default")
}
}
if index != 0 && index % 3 == 0 {
switch index {
case 6:
if character != "." {
newRut.append(".")
}
default:
print("Default")
}
}
}
newRut.append(String(character))
}
textField.text = newRut
}
下面的代码应该可以工作
let mask = "X.XXX.XXX-X"
let mask2 = "XX.XXX.XXX-X"
@objc func textFieldDidChange(_ textField: UITextField) {
let string = textField.text
let number = formattedNumber(number: textField.text!)
textField.text = number
print(string)
}
private func formattedNumber(number: String) -> String {
var cleanPhoneNumber = number.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
var result = ""
var index = cleanPhoneNumber.startIndex
var fieldMask: String!
if number.count < 12 {
fieldMask = mask
}else {
fieldMask = mask2
}
for ch in fieldMask.characters {
if index == cleanPhoneNumber.endIndex {
break
}
if ch == "X" {
result.append(cleanPhoneNumber[index])
index = cleanPhoneNumber.index(after: index)
} else {
result.append(ch)
}
}
return result
}
let mask=“X.XXX.XXX-X”
让mask2=“XX.XXX.XXX-X”
@objc func textFieldDidChange(textField:UITextField){
让string=textField.text
让number=formattedNumber(number:textField.text!)
textField.text=数字
打印(字符串)
}
private func formattedNumber(编号:String)->String{
var cleanPhoneNumber=number.components(separatedBy:CharacterSet.decimalDigits.inversed).joined()
var result=“”
var index=cleanPhoneNumber.startIndex
变量字段掩码:字符串!
如果number.count<12{
字段掩码=掩码
}否则{
fieldMask=mask2
}
对于ch in fieldMask.characters{
如果索引==cleanPhoneNumber.endIndex{
打破
}
如果ch==“X”{
结果.追加(cleanPhoneNumber[索引])
index=cleanPhoneNumber.index(在:index之后)
}否则{
结果追加(ch)
}
}
返回结果
}
我编写此代码的方法是编写一个函数,将任何输入字符串转换为显示版本,将每个按键捕获为一个类变量(无格式),将其用作函数的输入,在文本字段中显示输出。这到底是什么符号?请避免只发布代码答案。最好提供错误的解释以及答案如何解决问题。此外,如果您是从另一个答案复制,您可能需要更新代码中的变量名称。