Swift-无法指定类型为';AEWebServices.Type';设置为类型为';NSXMLParserDelegate?&x27;

Swift-无法指定类型为';AEWebServices.Type';设置为类型为';NSXMLParserDelegate?&x27;,xml,swift,nsxmlparser,Xml,Swift,Nsxmlparser,我正在从web服务读取xml。我可以使用println成功地显示xml。我现在尝试获取xml响应,并使用NSXMLParse解析各个元素。这是我的代码: public class AEWebServices : NSObject, NSXMLParserDelegate { var posts = NSMutableArray() var elements = NSMutableDictionary() var element = NSString() var n

我正在从web服务读取xml。我可以使用println成功地显示xml。我现在尝试获取xml响应,并使用NSXMLParse解析各个元素。这是我的代码:

public class AEWebServices : NSObject, NSXMLParserDelegate
{
    var posts = NSMutableArray()
    var elements = NSMutableDictionary()
    var element = NSString()
    var nextItem = AEItem()

    var mutableData:NSMutableData  = NSMutableData.alloc()
    var currentElementName:NSString = ""
    var foundCharacters = ""
    var appParsedData = [Dictionary<String, String>]()
    var currentDataDictionary = Dictionary<String, String>()

    public class func performSearch(searchTerm : String, webService : String, resultsType : String) -> Bool{
        var serviceSuccess = false

        SRWebClient.GET(AEState.baseUrl + webService+"AccessKey="+AEState.accessKey+"&SearchTerm=" + searchTerm,
            success:{(response:AnyObject!, status:Int) -> Void in
                //this is success part
                println("connection success - search successful")
                println(response)
                serviceSuccess=true
                let resultsData = response.dataUsingEncoding(NSUTF8StringEncoding)
                var xmlparser = NSXMLParser(data: resultsData!)
                xmlparser.delegate = self
                xmlparser.parse()
                println("just after xml statement")
                //self.performSegueWithIdentifier("showResults", sender: self)
            }, failure:{(error:NSError!) -> Void in
                //this is failure part
                println("connection failed - search failed")
                println(error)
        })
        return serviceSuccess
    }

    public func parser(parser: NSXMLParser,
        didStartElement elementName: String,
        namespaceURI: String!,
        qualifiedName qualifiedName: String?,
        attributes attributeDict: [NSObject : AnyObject]) {
            println("in parser")
            println(elementName) // This line is never executed.
    }


    public func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        println("in parser 2")
        if !foundCharacters.isEmpty {
            currentDataDictionary[currentElementName as String] = foundCharacters
            foundCharacters = ""

            //Last Element so add to main Dictionary
            //Cannot find last element yet on XML so use Charge_GBP for testing until fixed
            if currentElementName == "Charge_GBP" {
                appParsedData.append(currentDataDictionary)
            }
        }
    }

    public func parser(parser: NSXMLParser, foundCharacters string: String?) {
        println("in parser 3")
        if (currentElementName == "Entry_ID") || (currentElementName == "Title") || currentElementName == "Description" || currentElementName == "Charge_USD" || currentElementName == "Charge_GBP" || currentElementName == "Classification_Type" {
            foundCharacters += string!
        }
    }

    public func parserDidEndDocument(parser: NSXMLParser) {
        println("in parser 4")
       // self.setupItemsOnView()

    }
}
公共类AEWebServices:NSObject,NSXMLParserDelegate
{
var posts=NSMutableArray()
var elements=NSMutableDictionary()
var元素=NSString()
var nextItem=AEItem()
var-mutableData:NSMutableData=NSMutableData.alloc()
var currentElementName:NSString=“”
var foundCharacters=“”
var appParsedData=[Dictionary]()
var currentDataDictionary=字典()
公共类func performSearch(searchTerm:String,webService:String,resultsType:String)->Bool{
var serviceSuccess=false
SRWebClient.GET(AEState.baseUrl+webService+“AccessKey=“+AEState.AccessKey+””和SearchTerm=“+SearchTerm,
成功:{(响应:AnyObject!,状态:Int)->Void in
//这是成功的一部分
println(“连接成功-搜索成功”)
println(响应)
serviceSuccess=true
让resultsData=response.dataUsingEncoding(NSUTF8StringEncoding)
var xmlparser=NSXMLParser(数据:resultsData!)
xmlparser.delegate=self
xmlparser.parse()
println(“紧跟在xml语句之后”)
//self.performsguewithidentifier(“显示结果”,发件人:self)
},失败:{(错误:NSError!)->在中无效
//这是失败的一部分
println(“连接失败-搜索失败”)
println(错误)
})
返回服务成功
}
公共func解析器(解析器:NSXMLParser,
didStartElement元素名称:字符串,
namespaceURI:String!,
qualifiedName qualifiedName:字符串?,
属性属性说明:[NSObject:AnyObject]){
println(“在解析器中”)
println(elementName)//这一行永远不会执行。
}
公共func解析器(解析器:NSXMLParser,didEndElement元素名称:String,namespaceURI:String?,qualifiedName qName:String?){
println(“在解析器2中”)
if!foundCharacters.isEmpty{
currentDataDictionary[currentElementName作为字符串]=foundCharacters
foundCharacters=“”
//最后一个元素添加到主字典
//无法在XML上找到最后一个元素,因此在修复之前,请使用Charge_GBP进行测试
如果currentElementName==“费用为英镑”{
appParsedData.append(currentDataDictionary)
}
}
}
公共func解析器(解析器:NSXMLParser,foundCharacters string:string?){
println(“在解析器3中”)
如果(currentElementName==“条目ID”)| |(currentElementName==“标题”)| | currentElementName==“描述”| | currentElementName==“费用|美元”| | currentElementName==“费用|英镑”| currentElementName==“分类|{
foundCharacters+=字符串!
}
}
public func parserDidEndDocument(解析器:NSXMLParser){
println(“在解析器4中”)
//self.setupItemsOnView()
}
}
我的代码旨在建立一个类,该类将连接到web服务,如果成功,将接收生成的xml信息,并使用NSXMLParser对其进行解析。我正在实现NSXMLParserDelegate,但这行代码给我带来了一个问题:

xmlparser.delegate=self

我得到的错误是: 无法将“AEWebServices.type”类型的值分配给“NSXMLParserDelegate”类型的值


我是Swift的新手,所以如果我遗漏了一些明显的东西,请原谅我:-)感谢您的帮助。

接受克劳斯·乔根森的建议,在闭包外发表声明,以给出以下内容,该声明汇编并起作用:

var-xmlParser:NSXMLParser

public func performSearch(searchTerm:String,webService:String,resultsType:String)->Bool{ var serviceSuccess=false

SRWebClient.GET(AEState.baseUrl + webService+"AccessKey="+AEState.accessKey+"&SearchTerm=" + searchTerm,
    success:{(response:AnyObject!, status:Int) -> Void in
        //this is success part
        println("connection success - search successful")
        println(response)
        serviceSuccess=true
        var resultsData = response.dataUsingEncoding(NSUTF8StringEncoding)

        self.xmlParser = NSXMLParser(data: resultsData!)
        self.xmlParser.delegate = self
        self.xmlParser.parse()

        println("just after xml statement")
        //self.performSegueWithIdentifier("showResults", sender: self)
    }, failure:{(error:NSError!) -> Void in
        //this is failure part
        println("connection failed - search failed")
        println(error)
})
return serviceSuccess

}

您很可能希望在闭包之外声明
var xmlparser=NSXMLParser()xmlparser.delegate=self
块,因为self否则无法访问,然后找到一种方法将数据传递给它。感谢您的帮助,克劳斯-解决了我的问题,我已将其作为答案发布在下面。如果您添加您的评论作为答案,我将接受:-)