ios - 用swift 4写的这两行是一样的吗?
问题描述
我在这一行收到了弃用警告:
components.append("-b \"\(string.substring(to: string.index(before: string.endIndex)))\"")
所以我把它改成:
components.append("-b \"\(String(string[..<string.endIndex]) )\"")
第二行好吗?,因为我的代码似乎工作正常。
解决方案
让我们来看看
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 指的是“结束”位置
推荐阅读
- python - 在 MatplotLib 中调整 X 轴上的日期和修复图例
- php - Wordpress 多站点:警告:检测到现有的 WordPress 网络
- swift - What is the correct syntax for using Publishers.debounce() in Swift Combine?
- dns - Request to Cloudflare DNS from Cloudflare worker not returning the DNS result
- c# - 在我编辑其 itemssource(这是一个 DB)后,我无法更新列表框的内容
- php - Sage Accounting API UnexpectedError
- asp.net-mvc - 自定义 EPiServer 表单:成功消息未显示为 HTML 代码
- reactjs - 有没有办法在 onClick 方法中调用多个函数而无需提供参数?
- bash - 处理中的替换命令。ebextensions
- python-3.x - 使用 Gensim 在 Python 中重新训练预训练的词嵌入