Я читаю xml из веб-службы. Я могу успешно отобразить xml с помощью println. Теперь я пытаюсь принять xml-ответ и проанализировать отдельные элементы, используя NSXMLParse. Это мой код:Swift - Невозможно присвоить значение типа «AEWebServices.Type» значению типа NSXMLParserDelegate?
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()
}
}
Мой код стремится создать класс, который будет подключаться к веб-службе, и, в случае успеха, будет получать итоговую информацию о XML и анализировать ее с помощью NSXMLParser. Я реализации NSXMLParserDelegate, но эта строка кода вызывает у меня проблема:
xmlparser.delegate = самостоятельная
Ошибки я получаю: Невозможно присвоить значение типа «AEWebServices.Type» до значения типа NSXMLParserDelegate?
Я новичок в Swift, так что простите меня, если мне не хватает чего-то очевидного :-) Помогите оценить.
Вы, скорее всего, нужно будет объявить 'вар xmlparser = NSXMLParser() xmlparser.delegate = self' за пределами вашего закрытия, так как в противном случае он недоступен, а затем найдите способ передачи данных на него. –
Спасибо за помощь, Клаус - это решило мою проблему, которую я опубликовал в качестве ответа ниже. Если вы добавите свой комментарий в качестве ответа, я соглашусь с ним :-) – JanB