0
votes

I am trying to write a method which extracts a HTML tag into a array because I want to parse a web page in a tree structure.

  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
}

On the line:

saveToArray.append(resultString)

I am getting the error:

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

The error states that saveToArray is immutable. I thought that the array is copied by reference...?

Why is this happening?

( I am using Swift 2.0 and Xcode 7.1 ).

1

1 Answers

2
votes

Parameters passed in methods are immutable (let) by default.
Add the keyword var to make them mutable

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