2014-11-22 18 views
4

我想調用方法「deleteCharactersInRange」,但它不起作用。如何使用deleteCharactersInRange?

這是來自蘋果文檔的摘錄:

斯威夫特

FUNC deleteCharactersInRange(_人氣指數:NSRange)

var day = "" 

    let stringRange:NSRange = NSMakeRange(0, 4) 
    day = day.deleteCharacterInRange(stringRange) 


    // I've also tried this, because in the Documentation 
    // I can't see wether the method is void or returns a String 

    day.deleteCharacterInRange(stringRange) 

我收到此錯誤信息:

「字符串」沒有一個名爲「deleteCharactersInRange」

+0

你有一個錯字。你錯過了's'。 – nhgrif 2014-11-22 17:31:58

回答

13

你引用的方法屬於NSMutableString。但是既然你使用了Swift並且沒有明確創建一個,你會得到一個Swift String

如果你想在斯威夫特String操作,你需要使用str.removeRange和頗爲尷尬使用Range

var str = "Hello, playground" 
str.removeRange(Range<String.Index>(start: str.startIndex, end:advance(str.startIndex, 7))) 
// "playground" 
+0

謝謝,但這是什麼「Range 」意味着/怎麼辦?這也是一種方法,如果是的話是什麼樣的? – Codey 2014-11-22 17:49:04

+0

要打破這個答案...,'Range (/ * stuff * /)'與(NSMakeRange)函數相當(大致)。它是Swift'Range'結構體的初始化器。 – nhgrif 2014-11-22 17:50:32

+0

'day.removeRange(Range (start:0,end:4))'這段代碼不起作用,在調用「 – Codey 2014-11-22 17:51:01

4

DarkDust的回答來看,我們可以使成員非常雨燕般extension,這將使removeRange更容易使用:

extension String { 
    mutating func deleteCharactersInRange(range: NSRange) { 
     let startIndex = self.startIndex.advancedBy(range.location) 
     let length = range.length 
     self.removeRange(startIndex ..< startIndex.advancedBy(length)) 
    } 
} 

現在你可以使用它作爲這樣的:

let range = NSMakeRange(0,4) 
var day = "Tuesday" 
day.deleteCharactersInRange(range) // day = "day" 
+0

好吧,我的問題是,我認爲蘋果公司取消了所有這些「可變 - 」的東西,而是使用var和let。 – Codey 2014-11-22 17:47:10

+0

@Codey查看我最近的修改。在答案的頂部使用字符串擴展名,而不是底部的字符串擴展名。 – nhgrif 2014-11-22 17:48:30

+0

在第一個代碼塊行中3.自身是否引用正在調用該函數的字符串?關鍵字「變異」對函數做了什麼? – Codey 2014-11-22 18:02:14

3

更新斯威夫特3

在斯威夫特3則需要使用範圍運算符a..<ba...b

var aString = "This is just the beginning" 
str.removeRange(Range<String.Index>(str.startIndex ..< str.startIndex.advancedBy(10))) 

甚至更​​簡潔

aString.removeRange(aString.startIndex..<aString.startIndex.advancedBy(10))