Swift 将 UITextField 限制为一位小数

Sha*_*han 3 objective-c uitextfield ios swift

如何使用 Swift 将 UITextField 限制为一位小数?文本字段用于输入价格,因此我不能允许超过一位小数。如果我使用 Objective-C,我会使用以下代码:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    NSArray *sep = [newString componentsSeparatedByString:@"."];
    if([sep count] >= 2)
    {
        NSString *sepStr=[NSString stringWithFormat:@"%@",[sep objectAtIndex:1]];
        return !([sepStr length]>1);
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

但由于 Swift 使用范围的方式不同,我无法将此代码转换为 Swift。第一行给了我一个错误说NSRange is not convertible to Range<String.Index>

编辑:在看到答案之前我最终这样做了:

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
    let tempRange = textField.text.rangeOfString(".", options: NSStringCompareOptions.LiteralSearch, range: nil, locale: nil)
    if tempRange?.isEmpty == false && string == "." {
        return false
    }

    return true
}
Run Code Online (Sandbox Code Playgroud)

我在另一个帖子上找到了这个。这个解决方案工作正常,但我不确定这是否是最好的方法,但它是一种简短而干净的方法。

Dev*_*t10 6

斯威夫特 4 和 Xcode 9.2

该解决方案仅允许输入一位小数点,因此允许有效的双精度数。

// Only allows one decimal point
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
    let arrayOfString = newString.components(separatedBy: ".")

    if arrayOfString.count > 2 {
        return false
    }
    return true
}
Run Code Online (Sandbox Code Playgroud)