我认为这可能是一个基本问题,但我很难在Swift中掌握词典的概念。我正在尝试获取基于XML的Web服务的内容,解析两个特定字段并将它们设置为字符串(一个名为“fileName”,一个名为“fileType”),然后将这些字符串添加到字典中(让我们调用字典“文件”)。我希望以后能够在我的应用中打印files.fileName!
或files.fileType!
来引用给定的实例。
以下是我正在使用的代码;
//MARK
func getData(theURL: String) {
//Define the passed string as a NSURL
let url = NSURL(string: theURL)
//Create a NSURL request to get the data from that URL
let request = NSURLRequest(URL: url!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)
//Begin the NSURL session
let session = NSURLSession.sharedSession()
session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
let xml = SWXMLHash.parse(data!)
//I think this is wrong
var files = [String]()
for elem in xml["XmlResponse"]["object"] {
let fileName: String? = elem.element?.attributes["name"]!
let fileType: String? = elem.element?.attributes["type"]!
//I also think this is wrong
let file = String(fileName: fileName, fileType: fileType)
self.files.append(file)
print(self.files)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
}).resume()
}
在上一次迭代中,我使用var files = [FileData]()
, FileData 是我创建的自定义类,用于保存fileName和fileType字符串。这是唯一的方法吗?我觉得好像错过了一个简单的前提;我知道如何收集数据(以及XML解析 工作),但我不太清楚如何将它添加到一个简单的字典中,以后可以调用。
谢谢!
答案 0 :(得分:0)
使用var files = [String]()
创建的是数组,而不是字典。
要在Swift中获得所需内容,您需要创建一个Dictionary,然后使用下标语法添加键值对:
var files = [String: String]()
...
files["fileName"] = fileName
files["fileType"] = fileType
要访问Dictionary,您可以使用相同的下标语法:
if let fileName = files["fileName"] {
...
}
答案 1 :(得分:0)
字典是从键到值的映射。在您的情况下,您有密钥fileName
和fileType
。并且您希望在这些键下存储实际文件名和文件类型,以便您可以使用各自的键访问它们。这比我能做的好explained by Apple。
以下代码应该做你想要的:
// Defining the dictionary and initializing an empty dictionary.
var files: [String: String] = [String: String]()
func getData(theURL: String) {
// snipped a lot of your code
//I think this is wrong
var files = [String]() // Yes, this is wrong! See above.
for elem in xml["XmlResponse"]["object"] {
let fileName: String? = elem.element?.attributes["name"]!
let fileType: String? = elem.element?.attributes["type"]!
// Here you store your values in the dictionary
files["fileName"] = fileName
files["fileType"] = fileType
print(self.files)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
}
您可以访问以下值:
let actualFileName = files["fileName"]
let actualFileType = files["fileType"]