Swift:类型“string”的值没有成员“length”

8

我在我的应用程序中实现了一些文本字段功能,因此我使用了TextField Delegates,但是它显示了一些错误,例如“类型为string的值没有length成员”。我不知道如何解决这个问题,请帮助我解决这个问题。

下面是我尝试的代码:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    var oldLength: Int = textField.text!.characters.count
    var replacementLength: Int = string.characters.count
    var rangeLength: Int = range.length
    var newLength: Int = oldLength - rangeLength + replacementLength
    if textField.tag == 1 {
        if string.length > 0 && !NSScanner.scannerWithString(string).scanInt(nil) {  **------>//Error was showed in this line.**
            return false
        }
        // This 'tabs' to next field when entering digits
        if newLength == 5 {
            if textField == txtOtp4 {
                textField.resignFirstResponder()
            }
        }
        else if oldLength > 0 && newLength == 0 {

        }

        return newLength <= 4
    }
    else {
        if newLength == 11 {
            if textField == txtPhoneNumber {
                textField.resignFirstResponder()
            }
            return newLength <= 10
        }
    }
    return true
    // This allows numeric text only, but also backspace for deletes
}

2
你为什么在一行中使用 string.length,而在另一行中使用 string.characters.count - luk2302
2个回答

24

替换

if string.length > 0

需要翻译的内容:

by

if string.characters.count > 0
Swift 4 版本更新: String 现在符合 Collection 协议,因此它拥有了 count 属性。

感谢您的回答,@Tim Vermeulen。 - B.Saravana Kumar
它能运行,但是出现了新的问题。 - B.Saravana Kumar
什么是错误? - Tim Vermeulen
同一行新错误。 - B.Saravana Kumar
1
那么将 NSScanner.scannerWithString(string) 替换为 NSScanner(string: string)。错误信息非常描述性,我建议您先自己尝试解决问题,然后再向他人寻求帮助。 - Tim Vermeulen
显示剩余2条评论

8
如果您正在使用Swift 2.0,您应该使用:
string.characters.count

获取字符串长度的字符数量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接