Cannot invoke substringToIndex with an arguement list type int

时间:2015-07-28 16:05:42

标签: ios swift

I'm trying to get this line to work:

textView.text = textView.text.substringToIndex(count(textView.text.utf16) - 1)

error: Cannot invoke substringToIndex with an arguement list type int

4 个答案:

答案 0 :(得分:5)

substringToIndex takes a String.Index which is different from an Int. If you want to take the whole string minus the last character, you could do

textView.text = textView.text.substringToIndex(advance(textView.text.endIndex, -1))

答案 1 :(得分:1)

为了推进David的回答,问题基本上是由于Foundation的NSString类和Swift的String类型之间存在差异而产生的。

该方法属于类型String需要<String.Index>,因为Swift中的字符串处理与NSString的实现不同。

为了澄清,NSString实例不使用Unicode字符,而Swift需要关于Unicode字符使用的String综合方法。因此,在将String转换为NSString时应该小心,反之亦然。

答案 2 :(得分:1)

您可以使用此扩展程序:

Swift 2.3

extension String
{   
    func substringToIndex(index: Int) -> String
    {
        if (index < 0 || index > self.characters.count)
        {
            print("index \(index) out of bounds")
            return ""
        }
        return self.substringToIndex(self.startIndex.advancedBy(index))
    }
}

Swift 3

extension String
{
    func substring(to index: Int) -> String
    {
        if (index < 0 || index > self.characters.count)
        {
            print("index \(index) out of bounds")
            return ""
        }
        return self.substring(to: self.characters.index(self.startIndex, offsetBy: index))
    }
}

并使用:

textView.text = textView.text.substringToIndex(textView.text.characters.count - 1)

答案 3 :(得分:0)

使用SWIFT 3的以下代码: -

if textView.text.characters.count > 100 {

            let tempStr = textView.text
            let index = tempStr?.index((tempStr?.endIndex)!, offsetBy: 100 - (tempStr?.characters.count)!)
            textView.text = tempStr?.substring(to: index!)
        }
    }