3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以使用substringWithRange方法。它需要一個(gè)開(kāi)始和結(jié)束String.Index。
var str = "Hello, playground"str.substringWithRange(Range<String.Index>(start: str.startIndex, end: str.endIndex)) //"Hello, playground"
要更改開(kāi)始和結(jié)束索引,請(qǐng)使用advancedBy(n)。
var str = "Hello, playground"str.substringWithRange(Range<String.Index>(start: str.startIndex.advancedBy(2), end: str.endIndex.advancedBy(-1))) //"llo, playgroun"
你仍然可以在NSRange中使用NSString方法,但是你必須確保使用這樣的NSString:
let myNSString = str as NSStringmyNSString.substringWithRange(NSRange(location: 0, length: 3))
注意:正如JanX2所提到的,第二種方法對(duì)于unicode字符串是不安全的。

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
斯威夫特2
簡(jiǎn)單
let str = "My String"
let subStr = str[str.startIndex.advancedBy(3)...str.startIndex.advancedBy(7)]
//"Strin"
斯威夫特3
let startIndex = str.index(str.startIndex, offsetBy: 3)
let endIndex = str.index(str.startIndex, offsetBy: 7)
str[startIndex...endIndex] // "Strin"
str.substring(to: startIndex) // "My "
str.substring(from: startIndex) // "String"
斯威夫特4
substring(to:)并且substring(from:)已棄用Swift 4。
String(str[..<startIndex]) // "My "
String(str[startIndex...]) // "String"
String(str[startIndex...endIndex]) // "Strin"

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
對(duì)這種方法的權(quán)衡取得了一些非常有見(jiàn)地的觀點(diǎn),尤其是隱藏的性能影響。字符串不是簡(jiǎn)單的野獸,并且到達(dá)特定索引可能花費(fèi)O(n)時(shí)間,這意味著使用下標(biāo)的循環(huán)可以是O(n ^ 2)。你被警告了。
您只需添加一個(gè)新subscript
功能,該功能需要一個(gè)范圍并用于advancedBy()
步行到您想要的位置:
import Foundationextension String { subscript (r: Range<Int>) -> String { get { let startIndex = self.startIndex.advancedBy(r.startIndex) let endIndex = startIndex.advancedBy(r.endIndex - r.startIndex) return self[Range(start: startIndex, end: endIndex)] } }}var s = "Hello, playground"println(s[0...5]) // ==> "Hello," println(s[0..<5]) // ==> "Hello"
為了好玩,您還可以+在索引上添加運(yùn)算符:
func +<T: ForwardIndex>(var index: T, var count: Int) -> T {
for (; count > 0; --count) {
index = index.succ()
}
return index
}
s.substringWithRange(s.startIndex+2 .. s.startIndex+5)
(我還不知道這個(gè)是否應(yīng)該成為該語(yǔ)言的一部分。)
添加回答
舉報(bào)