0
我正在嘗試編寫一個method
,它將一個HTML
tag
提取到數組中,因爲我想要解析一個網頁樹結構。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)。
你是對的。 TY。你知道這個改變了嗎?還是我的假設從一開始就錯了? –
你的假設是錯誤的,因爲Swift 1.0'String'和'[String]'是值類型並且被值複製。 – vadian