Swift 2.0 - ОШИБКА: неизменяемое значение типа «[String]» имеет только изменяющиеся члены с именем «append»

Я пытаюсь написать method, который извлекает HTML tag в массив, потому что я хочу проанализировать веб-страницу в древовидной структуре.

  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)

Я получаю сообщение об ошибке:

Неизменяемое значение типа «[String]» имеет только изменяемые члены с именем «append»

Ошибка гласит, что saveToArray неизменяемо. Я думал, что массив копируется по ссылке...?

Почему это происходит?

(Я использую Swift 2.0 и Xcode 7.1).


person MB_iOSDeveloper    schedule 06.11.2015    source источник


Ответы (1)


Параметры, передаваемые в методы, по умолчанию являются неизменяемыми (let).
Добавьте ключевое слово var, чтобы сделать их изменяемыми.

func extractStringFromHTMLInsideTags(htmlString:String, htmlTagPairArray:[String], var saveToArray:[String]) -> String
{ ...
person vadian    schedule 06.11.2015
comment
Вы правы. Тай. Вы знаете, когда это изменилось? Или мое предположение было ошибочным с самого начала? - person MB_iOSDeveloper; 06.11.2015
comment
Ваше предположение было неверным, поскольку Swift 1.0 String и [String] являются типами значений и копируются по значению. - person vadian; 06.11.2015