Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 根据字符串的长度,每N个字符格式化一个字符串_Swift - Fatal编程技术网

Swift 根据字符串的长度,每N个字符格式化一个字符串

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

各位,我需要根据字符串的长度逐字符实时更新字符串/文本字段

例如:如果用户插入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
重要的是,文本字段会为每个按下的字符进行自我更新,我的壁橱可以使它只在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)
}
}
返回结果
}

我编写此代码的方法是编写一个函数,将任何输入字符串转换为显示版本,将每个按键捕获为一个类变量(无格式),将其用作函数的输入,在文本字段中显示输出。这到底是什么符号?请避免只发布代码答案。最好提供错误的解释以及答案如何解决问题。此外,如果您是从另一个答案复制,您可能需要更新代码中的变量名称。