首页 > 解决方案 > 用swift 4写的这两行是一样的吗?

问题描述

我在这一行收到了弃用警告:

components.append("-b \"\(string.substring(to: string.index(before: string.endIndex)))\"")

所以我把它改成:

components.append("-b \"\(String(string[..<string.endIndex]) )\"")

第二行好吗?,因为我的代码似乎工作正常。

标签: iosswift

解决方案


让我们来看看

let string = "12345"
var components = [String]()
var components2 = [String]()

components.append("-b \"\(string.substring(to: string.index(before: string.endIndex)))\"")
components2.append("-b \"\(String(string[..<string.endIndex]) )\"")

print(components)
print(components2)
print(components == components2)

给我们

["-b \"1234\""]
["-b \"12345\""]
false

所以答案是,不,他们不是……

如果您的意图是删除最后一个字符,那么您可以使用dropLast

components.append("-b \"\(string.dropLast())\"")

请注意,您可以传递要删除的元素数量的参数(dropLast(2)例如)

最后,使用部分范围后的等效表达式为:

string[..<string.index(before: string.endIndex)]

那是因为第一个表达式转换为:

不包括endIndex之前的索引的索引

而第二个翻译为:

直到但不包括 endIndex 的索引

其中 endIndex 指的是“结束”位置


推荐阅读