Swift代码在[String:String]到URLQueryItem转换时崩溃

Swift代码在[String:String]到URLQueryItem转换时崩溃,swift,Swift,我像这样初始化[String:String] func doInBackground() { .... var getData = [String:String]() getData["domainOrGroupId"] = "5" getData["driverId"] = "2" getData["authKey"] = "998099" 然后我尝试将其转换为[URLQueryItem] var queryItems = [URLQueryItem]

我像这样初始化
[String:String]

func doInBackground() {
....
    var getData = [String:String]()
    getData["domainOrGroupId"] = "5"
    getData["driverId"] = "2"
    getData["authKey"] = "998099"
然后我尝试将其转换为
[URLQueryItem]

    var queryItems = [URLQueryItem]()

    for key in getData.keys {
       print(key+":"+getData[key as String]! as String)
       queryItems.append(URLQueryItem(name : key, value : getData[key])) 
    }
崩溃在线
queryItems.append

我错过了什么?我想是一些非常基本的东西

编辑

附加的断点位于
var queryItems=

getData [String : String]   3 key/value pairs   
[0] (key: String, value: String)    
[1] (key: String, value: String)    
[2] (key: String, value: String)    
点击
Step Over
直到
print
注意,我已将
print
移到
queryItems.append
之前

打印好吗

 driverId:2
发生了什么

再次点击
单步执行
,调试器消失,XCode显示一个对话框
测试成功
。我猜这意味着我的应用程序崩溃了

预期的结果

点击“单步跳过”只需在
for in
循环中的
getData
上迭代

编辑

我在DispatchQueue.global异步中运行该方法。在doInBackground有机会运行之前,程序已经完成。这是调试器无法正常运行的根本原因

DispatchQueue.global(qos: .background).async {
        self.doInBackground()

假设
getData
包含
参数
字典,只需使用API枚举字典即可:

var parameters = [String:String]()
parameters["domainOrGroupId"] = "5"
parameters["driverId"] = "2"
parameters["authKey"] = "98098"


var queryItems = [URLQueryItem]()

for (key, value) in parameters {
    queryItems.append(URLQueryItem(name : key, value : value))
    print(key+":"+value)
}
甚至在一行中使用
map

queryItems = parameters.map{ URLQueryItem(name : $0.0, value : $0.1) }

假设
getData
包含
参数
字典,只需使用API枚举字典即可:

var parameters = [String:String]()
parameters["domainOrGroupId"] = "5"
parameters["driverId"] = "2"
parameters["authKey"] = "98098"


var queryItems = [URLQueryItem]()

for (key, value) in parameters {
    queryItems.append(URLQueryItem(name : key, value : value))
    print(key+":"+value)
}
甚至在一行中使用
map

queryItems = parameters.map{ URLQueryItem(name : $0.0, value : $0.1) }


queryItems.append处崩溃(URLQueryItem(名称:key,值:value))
然后
参数
!=<代码>获取数据。代码编译并运行良好。您得到的错误原因是什么?测试会话日志:/MyPath/Logs/Test/D7584BF5-F4C5-47F8-900F-0153AE9E40B2/session-MyAppTests-2017-02-25_181159-20kR4l.log您真的希望我可以读取您硬盘上的本地文件吗?;-)哦,不,我只是在分享信息,以便你能指导我下一步的工作。在
queryItems.append(URLQueryItem(name:key,value:value))
然后
参数
!=<代码>获取数据。代码编译并运行良好。您得到的错误原因是什么?测试会话日志:/MyPath/Logs/Test/D7584BF5-F4C5-47F8-900F-0153AE9E40B2/session-MyAppTests-2017-02-25_181159-20kR4l.log您真的希望我可以读取您硬盘上的本地文件吗?;-)哦,不,我只是在分享信息,以便您可以指导我下一步的工作。假设
getData
==
参数
,您的代码编译并运行良好。请提供一个复制您的问题的方法。修复了小错误。您的代码仍然可以正常编译和运行。它对我不起作用。请将其复制并粘贴到新项目中–它可以在Swift 3.0.2和3.1中正常编译和运行。您的问题可能在代码的其他地方。假设
getData
==
参数
,您的代码编译并运行良好。请提供一个复制您的问题的方法。修复了小错误。您的代码仍然可以正常编译和运行。它对我不起作用。请将其复制并粘贴到新项目中–它可以在Swift 3.0.2和3.1中正常编译和运行。您的问题可能存在于代码的其他地方。