我在Objective C中找到了我的问题的答案,但在Swift中找不到它。如何在将字符串值添加到NSMutableString方面使下面的代码工作?它会抛出仅为抽象类定义的长度"错误。
此代码旨在解析xml提要并将其写入NSMutableDictionary()
var ftitle = NSMutableString?()
func parser(parser: NSXMLParser!, foundCharacters string: String!) {
if element.isEqualToString("title") {
ftitle?.appendString(string)
}
}
修改:这是更多背景信息;
元素是NSString,在DidStartElement期间分配给解析器中的elementName。在这段代码中,我抓住了"标题"通过元素的饲料含量。
我有一个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 = ""
}
}
答案 0 :(得分:6)
ftitle = NSMutableString.alloc()
不是分配空字符串的正确方法。它分配了
NSMutableString
没有初始化它。 NSMutableString
是一个班级
群集,所以这可能会导致各种奇怪的错误。
在Swift中,你只会做
ftitle = NSMutableString()
或只是
ftitle = ""
出于同样的原因,
elements = NSMutableDictionary.alloc()
错了,应该是
elements = NSMutableDictionary()
答案 1 :(得分:2)
除非我完全误解了您的尝试,否则以下代码可能是一个更简洁的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
}
}