2015-11-06 28 views
0

我正在嘗試編寫一個method,它將一個HTMLtag提取到數組中,因爲我想要解析一個網頁樹結構。Swift 2.0 - 錯誤:類型'[String]'的不可變值只有名爲'append'的變異成員

func extractStringFromHTMLInsideTags(htmlString:String, htmlTagPairArray:[String], saveToArray:[String]) -> String 
{ 
    var htmlNSString  = htmlString as NSString 
    var lenght   = htmlNSString.length 

    var openingTag  = htmlTagPairArray[0] as NSString 
    var openingTagLength = openingTag.length 

    var closingTag  = htmlTagPairArray[1] as NSString 
    var closingTagLength = closingTag.length 

    if (htmlString.rangeOfString(htmlTagPairArray[0]) != nil) 
    { 
     let rangeStart:NSRange! = htmlNSString.rangeOfString(htmlTagPairArray[0], options: NSStringCompareOptions.CaseInsensitiveSearch) 
     var rangeEnd:NSRange! = htmlNSString.rangeOfString(htmlTagPairArray[1], options: NSStringCompareOptions.CaseInsensitiveSearch) 

     let startTagIndex: Int = rangeStart.location + openingTagLength 
     let boldTextLenght: Int = rangeEnd.location - rangeStart.location - openingTagLength 
     let endTagIndex: Int = startTagIndex + boldTextLenght 


     let startIndex   = advance(htmlString.startIndex,startTagIndex)//advance as much as you like 
     let endIndex   = advance(htmlString.startIndex,endTagIndex) 
     let range    = startIndex..<endIndex 
     var resultString  = htmlString.substringWithRange(range) 

     saveToArray.append(resultString) 

     resultString = htmlString.stringByReplacingOccurrencesOfString(htmlTagPairArray[0] + resultString + htmlTagPairArray[1], withString: resultString, options: nil, range: nil) 

     if (resultString.rangeOfString(htmlTagPairArray[0]) != nil) 
     { 
      resultString = extractStringFromHTMLInsideTags(resultString,htmlTagPairArray:htmlTagPairArray, saveToArray:saveToArray) 
     } 

     return resultString 

    } 

    return htmlString 
} 

就行了:

saveToArray.append(resultString) 

我收到錯誤:

Immutable value of type '[String]' only has mutating members named 'append'

的錯誤指出saveToArray是不可改變的。我認爲數組是通過引用複製的...?

這是怎麼發生的?

(我正在使用Swift 2.0和Xcode 7.1)。

回答

2

默認情況下,在方法中傳遞的參數是不可變的(let)。
添加關鍵字var,使它們可變

func extractStringFromHTMLInsideTags(htmlString:String, htmlTagPairArray:[String], var saveToArray:[String]) -> String 
{ ... 
+0

你是對的。 TY。你知道這個改變了嗎?還是我的假設從一開始就錯了? –

+1

你的假設是錯誤的,因爲Swift 1.0'String'和'[String]'是值類型並且被值複製。 – vadian

相關問題