在 Swift 中将字符串附加到 NSMutableString

Appending a String to NSMutableString in Swift

我在 Objective C 中找到了问题的答案,但在 Swift 中找不到。我怎样才能使下面的代码在将字符串值添加到 NSMutableString 方面起作用?它抛出 "length only defined for abstract class" 错误。

此代码旨在解析 xml 提要并将其写入 NSMutableDictionary()

var ftitle = NSMutableString?()
func parser(parser: NSXMLParser!, foundCharacters string: String!) {
if element.isEqualToString("title") {
        ftitle?.appendString(string)
    }
}

编辑:这里有更多上下文;

element 是在 DidStartElement 期间分配给解析器中的 elementName 的 NSString。在此代码中,我通过元素捕获了提要内容的 "title"。

我有一个 NSMutableDictionary(),它包括不同的 NSMutableString(),例如 ftitle。这段代码是把字符串添加到ftitle中,也就是NSMutableString,然后它会成为NSMutableDictionary的一部分,最后我会读取它写入我的tableviewcells

这里是 didStartElement 方法:

func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!) {
    element = elementName

    if (element as NSString).isEqualToString("item"){
        elements = NSMutableDictionary.alloc()
        elements = [:]
        ftitle = NSMutableString.alloc()
        link = ""
        fdescription = NSMutableString.alloc()
        fdescription = ""
    }
}
ftitle = NSMutableString.alloc()

不是分配空字符串的正确方法。它分配了 NSMutableString 没有初始化它。 NSMutableString 是 class 集群,所以这会导致各种奇怪的错误。

在Swift中,您只需

ftitle = NSMutableString()

或者干脆

ftitle = ""

出于同样的原因,

elements = NSMutableDictionary.alloc()

错了,应该是

elements = NSMutableDictionary()

除非我完全误解了您的意图,否则以下代码可能是更简洁的 Swift 实现。 用 var 声明的字符串是可变的。用 let 声明的字符串是不可变的。不确定什么时候适合使用 NSMutableString。也许当你有一个混合的 Swift / Obj-C 项目时。

    var ftitle = "" // declare ftitle as an empty string
var element = "" // this is coming from some other function
func parser(parser: NSXMLParser!, foundCharacters myString: String!) {
    if element == "title" {
        ftitle += myString // appends element to ftitle
    }
}