Chr*_*ley 2 xcode count ios swift
我知道会有很多指向重复的指针但是在我更新到xcode 6.3之前这已经有效了,现在它有问题.
剧本:
extension String {
func removeCharsFromEnd(count:Int) -> String {
var getSelf = self as String
var stringLength = count(getSelf.utf16)
let substringIndex = (stringLength < count) ? 0 : stringLength - count
return self.substringToIndex(advance(self.startIndex, substringIndex))
}
}
Run Code Online (Sandbox Code Playgroud)
错误:无法使用类型为'(String.UTF16View)的列表的参数调用'count'
我还想指出,这种新的计数方法适用于我用过的其他地方(在此扩展之外).
提前致谢.
count是扩展方法参数的名称,并隐藏Swift库函数count().您可以重命名参数或调用
var stringLength = Swift.count(getSelf.utf16)
Run Code Online (Sandbox Code Playgroud)
明确.
但请注意,计算UTF-16代码单元的数量在这里是错误的,它应该是
var stringLength = Swift.count(getSelf)
Run Code Online (Sandbox Code Playgroud)
计算字符串中的字符数,因为这
advance()也是重要的.您可以轻松验证
let foo = "".removeCharsFromEnd(1)
println(foo)
Run Code Online (Sandbox Code Playgroud)
以下是您的方法的简化版本:
extension String {
func removeCharsFromEnd(count : Int) -> String {
precondition(count >= 0, "Attempt to call removeCharsFromEnd() with a negative count")
// Decrement `endIndex` by `count`, but not beyond `startIndex`:
let idx = advance(self.endIndex, -count, self.startIndex)
return self.substringToIndex(idx)
}
}
Run Code Online (Sandbox Code Playgroud)
使用advance()具有负距离的三参数版本.
Swift 2/Xcode 7的更新:
extension String {
func removeCharsFromEnd(count : Int) -> String {
precondition(count >= 0, "Attempt to call removeCharsFromEnd() with a negative count")
// Decrement `endIndex` by `count`, but not beyond `startIndex`:
let idx = self.endIndex.advancedBy(-count, limit: self.startIndex)
return self.substringToIndex(idx)
}
}
Run Code Online (Sandbox Code Playgroud)