我有以下简单的代码写在Swift 3:

let str = "Hello, playground"
let index = str.index(of: ",")!
let newStr = str.substring(to: index)

在Xcode 9 beta 5中,我得到了以下警告:

'substring(to:)'已弃用:请使用带有'partial range from'操作符的字符串切片下标。

这个部分范围的切片下标如何在Swift 4中使用?


当前回答

快速4 5 5+

Last的子字符串

let str = "Hello World"
let removeFirstSix = String(str.dropFirst(6))
print(removeFirstSix) //World

来自First的子字符串

let removeLastSix = String(str.dropLast(6))
print(removeLastSix) //Hello

其他回答

你应该让一侧为空,因此被称为“部分范围”。

let newStr = str[..<index]

同样适用于操作符的部分范围,只需要将另一侧留空即可:

let newStr = str[index...]

请记住,这些范围操作符返回一个Substring。如果你想把它转换成一个字符串,使用string的初始化函数:

let newStr = String(str[..<index])

您可以在这里阅读更多关于新子字符串的信息。

Swift 4/5更短:

let string = "123456"
let firstThree = String(string.prefix(3)) //"123"
let lastThree = String(string.suffix(3)) //"456"

substring(from: index)转换为[index…]

检查样品

let text = "1234567890"
let index = text.index(text.startIndex, offsetBy: 3)

text.substring(from: index) // "4567890"   [Swift 3]
String(text[index...])      // "4567890"   [Swift 4]

快速4 5 5+

Last的子字符串

let str = "Hello World"
let removeFirstSix = String(str.dropFirst(6))
print(removeFirstSix) //World

来自First的子字符串

let removeLastSix = String(str.dropLast(6))
print(removeLastSix) //Hello

使用Swift 4从字符串创建子字符串(前缀和后缀):

let str : String = "ilike"
for i in 0...str.count {
    let index = str.index(str.startIndex, offsetBy: i) // String.Index
    let prefix = str[..<index] // String.SubSequence
    let suffix = str[index...] // String.SubSequence
    print("prefix \(prefix), suffix : \(suffix)")
}

输出

prefix , suffix : ilike
prefix i, suffix : like
prefix il, suffix : ike
prefix ili, suffix : ke
prefix ilik, suffix : e
prefix ilike, suffix : 

如果你想在两个索引之间生成一个子字符串,使用:

let substring1 = string[startIndex...endIndex] // including endIndex
let subString2 = string[startIndex..<endIndex] // excluding endIndex