我有以下用Swift 3编写的简单代码:
let str = "Hello, playground"
let index = str.index(of: ",")!
let newStr = str.substring(to: index)
Run Code Online (Sandbox Code Playgroud)
从Xcode 9 beta 5,我得到以下警告:
'
substring(to:)'已被弃用:请使用String带有'partial range from'运算符的切片下标.
如何在Swift 4中使用具有部分范围的切片下标?
Tam*_*gel 353
你应该将一边留空,因此名称为"部分范围".
let newStr = str[..<index]
Run Code Online (Sandbox Code Playgroud)
同样代表运营商的部分范围,只是将对方留空:
let newStr = str[index...]
Run Code Online (Sandbox Code Playgroud)
请记住,这些范围运算符返回a Substring.如果要将其转换为字符串,请使用String初始化函数:
let newStr = String(str[..<index])
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关新子串的更多信息.
Moh*_*goo 255
将子串(Swift 3)转换为字符串切片(Swift 4)
示例在Swift 3,4中:
let newStr = str.substring(to: index) // Swift 3
let newStr = String(str[..<index]) // Swift 4
Run Code Online (Sandbox Code Playgroud)
let newStr = str.substring(from: index) // Swift 3
let newStr = String(str[index...]) // Swift 4
Run Code Online (Sandbox Code Playgroud)
let range = firstIndex..<secondIndex // If you have a range
let newStr = = str.substring(with: range) // Swift 3
let newStr = String(str[range]) // Swift 4
Run Code Online (Sandbox Code Playgroud)
dim*_*iax 67
let text = "Hello world"
text[0] // H
text[...3] // "Hell"
text[6..<text.count] // world
text[NSRange(location: 6, length: 3)] // wor
Run Code Online (Sandbox Code Playgroud)
import Foundation
public extension String {
subscript(value: Int) -> Character {
self[index(at: value)]
}
}
public extension String {
subscript(value: NSRange) -> Substring {
self[value.lowerBound..<value.upperBound]
}
}
public extension String {
subscript(value: CountableClosedRange<Int>) -> Substring {
self[index(at: value.lowerBound)...index(at: value.upperBound)]
}
subscript(value: CountableRange<Int>) -> Substring {
self[index(at: value.lowerBound)..<index(at: value.upperBound)]
}
subscript(value: PartialRangeUpTo<Int>) -> Substring {
self[..<index(at: value.upperBound)]
}
subscript(value: PartialRangeThrough<Int>) -> Substring {
self[...index(at: value.upperBound)]
}
subscript(value: PartialRangeFrom<Int>) -> Substring {
self[index(at: value.lowerBound)...]
}
}
private extension String {
func index(at offset: Int) -> String.Index {
index(startIndex, offsetBy: offset)
}
}
Run Code Online (Sandbox Code Playgroud)
iln*_*nur 36
Swift 4中的缩写:
var string = "123456"
string = String(string.prefix(3)) //"123"
string = String(string.suffix(3)) //"456"
Run Code Online (Sandbox Code Playgroud)
小智 24
您可以通过以下方式将代码转换为Swift 4:
let str = "Hello, playground"
let index = str.index(of: ",")!
let substr = str.prefix(upTo: index)
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码获得一个新字符串:
let newString = String(str.prefix(upTo: index))
Run Code Online (Sandbox Code Playgroud)
Den*_*Den 15
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]
Run Code Online (Sandbox Code Playgroud)
Aug*_*Lin 13
extension String {
func subString(from: Int, to: Int) -> String {
let startIndex = self.index(self.startIndex, offsetBy: from)
let endIndex = self.index(self.startIndex, offsetBy: to)
return String(self[startIndex...endIndex])
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var str = "Hello, Nick Michaels"
print(str.subString(from:7,to:20))
// print Nick Michaels
Run Code Online (Sandbox Code Playgroud)
一些有用的扩展:
extension String {
func substring(from: Int, to: Int) -> String {
let start = index(startIndex, offsetBy: from)
let end = index(start, offsetBy: to - from)
return String(self[start ..< end])
}
func substring(range: NSRange) -> String {
return substring(from: range.lowerBound, to: range.upperBound)
}
}
Run Code Online (Sandbox Code Playgroud)
uppercasedFirstCharacterSwift3和Swift4中的便利属性示例.
属性uppercasedFirstCharacterNew演示了如何在Swift4中使用String切片下标.
extension String {
public var uppercasedFirstCharacterOld: String {
if characters.count > 0 {
let splitIndex = index(after: startIndex)
let firstCharacter = substring(to: splitIndex).uppercased()
let sentence = substring(from: splitIndex)
return firstCharacter + sentence
} else {
return self
}
}
public var uppercasedFirstCharacterNew: String {
if characters.count > 0 {
let splitIndex = index(after: startIndex)
let firstCharacter = self[..<splitIndex].uppercased()
let sentence = self[splitIndex...]
return firstCharacter + sentence
} else {
return self
}
}
}
let lorem = "lorem".uppercasedFirstCharacterOld
print(lorem) // Prints "Lorem"
let ipsum = "ipsum".uppercasedFirstCharacterNew
print(ipsum) // Prints "Ipsum"
Run Code Online (Sandbox Code Playgroud)
您可以使用类String的扩展创建自定义subString方法,如下所示:
extension String {
func subString(startIndex: Int, endIndex: Int) -> String {
let end = (endIndex - self.count) + 1
let indexStartOfText = self.index(self.startIndex, offsetBy: startIndex)
let indexEndOfText = self.index(self.endIndex, offsetBy: end)
let substring = self[indexStartOfText..<indexEndOfText]
return String(substring)
}
}
Run Code Online (Sandbox Code Playgroud)
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)")
}
Run Code Online (Sandbox Code Playgroud)
prefix , suffix : ilike
prefix i, suffix : like
prefix il, suffix : ike
prefix ili, suffix : ke
prefix ilik, suffix : e
prefix ilike, suffix :
Run Code Online (Sandbox Code Playgroud)
let substring1 = string[startIndex...endIndex] // including endIndex
let subString2 = string[startIndex..<endIndex] // excluding endIndex
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118831 次 |
| 最近记录: |