我是 Swift 新手,正在编写我的第一个带有网络请求的应用程序。出于测试目的,我使用框架 Alamofire 和 SWXMLHash 创建了一个应用程序,用于解析请求中的 xml 数据。
总的来说,它工作得很好(或多或少,我不知道如何为 Alamofire 使用 completionHandler,我什至不明白那到底是什么......真丢脸)
但现在这是我的 xml-Structure 第一次有多个同名项目,我想使用它们的“名称”属性将它们全部迭代到一个数组中。
让我举一个 XML 的例子:
<Root>
<Results>
<Url Name="Test1"></Url>
<Url Name="Test2"></Url>
<Url Name="Test3"></Url>
</Results>
</Root>
所以我的数组应该是这样的:
["Test1", "Test2", "Test3"]
到目前为止,我的代码无法正常工作......我收到一个错误,解开 xml 数据返回 nil。这是整个文件的代码:
import WatchKit
import Foundation
import Alamofire
import SWXMLHash
public var url = "http://www.testurl.com"
public var user = "testuser"
class InterfaceController: WKInterfaceController {
@IBAction func selectedAccountActivate() {
campaignLister()
}
func campaignLister(){
Alamofire.request(.GET, url, parameters: ["function":"catalog", "user":user, "pwd":"1234"])
.response { (request, response, data, error) in
//print(response)
let xml = SWXMLHash.parse(data!)
var xml2: [String] = []
for elem in xml["Root"]["Results"] {
/以下行给了我错误。当我发出一个只有一个“URL”元素的请求时它可以工作,但是一旦我在这个例子中有很多类似的东西,我的应用程序就会崩溃/
xml2.append(elem["Url"].element!.attributes["Name"]!) } print(xml2) } }
override func willActivate() {
super.willActivate()
}
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
}
override func didDeactivate() {
super.didDeactivate()
}
}
谁能帮我吗?我经常使用谷歌来解决这个问题,但我没有找到任何解决方案。特别是因为我对 Swift 真的很陌生……
此致,
哈勒龙
(抱歉,您可能会发现语法错误,英语不是我的母语。)