在 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
}
}
我在 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
}
}