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
答案 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!)
}
}