gpt4 book ai didi

ios - 字符串的长度作为字符串的扩展

转载 作者:可可西里 更新时间:2023-11-01 00:16:45 27 4
gpt4 key购买 nike

我知道会有很多指向重复项的指针,但是在我更新到 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))
}
}

错误:无法使用类型为“(String.UTF16View)”的列表参数调用“count”


我还想指出,这种新的计数方法在我用过的其他任何地方(在这个扩展之外)都有效。

提前致谢。

最佳答案

count 是您的扩展方法参数的名称并隐藏了Swift 库函数 count()。您可以重命名参数或调用

var stringLength = Swift.count(getSelf.utf16)

明确地。

但是注意这里统计UTF-16编码单元的个数是错误的,应该是

var stringLength = Swift.count(getSelf)

统计字符串中的字符数,因为那是什么advance() 也很重要。您可以使用

轻松验证
let foo = "😀😁😂".removeCharsFromEnd(1)
println(foo)

这是您的方法的简化版本:

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)
}
}

使用具有负距离的 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)
}
}

关于ios - 字符串的长度作为字符串的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29548031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com