我有一个数组(来自全局常量文件),我试图在API调用中使用它来创建另一个字典数组。最初的数组是:
let callCountries = ["AU" : "Australia", "NZ" : "New Zealand", "UK" : "United Kingdom", "ZA" : "South Africa", "US" : "United States"]
然后我想抓住国家的短代码并循环通过它来构建一个新的数组,如下所示......
func getCallCentreNumbers(){
var countrykeys = Array(callCountries.keys)
API.getJudeContactNumbers({response in
self.judeCallCentreNumberDict = [
countrykeys : (response.value(forKey: countrykeys) as! String),
]
})
}
没有插入数组值的初始代码行是:
self.judeCallCentreNumberDict = [
"ZM" : (response.value(forKey: "ZM") as! String),
]
我想用countrykeys变量替换“ZM”,但是无法使用这个变量。 (对不起,我还是个新手)。有人能指出我正确的方向吗?
答案 0 :(得分:1)
我建议循环回复
首先尝试在发出请求之前清除judeCallCentreNumberDict
judeCallCentreNumberDict = [:]
然后,当你有响应时,创建一个键数组并循环它
(在API.getJudeContactNumbers({response in
内)
let countrykeys = callCountries.map { $0.key }
countrykeys.forEach {
guard let value = response.value(forKey: $0) as? String else { return }
judeCallCentreNumberDict[$0] = value
}
注意:
$0
表示循环中的当前项(在这种情况下,它将是其中一个键)judeCallCentreNumberDict
属于[String:String]
类型,因此我们只能添加String
类型而非String?
的值,这就是guard
{1}}适用于答案 1 :(得分:0)
看起来您想要查看响应中的每个数字,并为每个国家/地区代码构建一个数字字典。您接近此实现,但您需要迭代countrykeys
中的密钥,查看每个密钥的值,并将该值分配给judeCallCentreNumberDict
中的相应国家/地区代码。
func getCallCentreNumbers() {
var countrykeys = Array(callCountries.keys)
API.getJudeContactNumbers { response in
for countryKey in countryKeys {
let number = (response.value(forKey: countrykeys) as! String)
self.judeCallCentreNumberDict[countryKey] = number
}
}
}
上面的代码将解决编译器问题,但似乎这个代码对于你想要做的事情是不必要的(至少在给定的上下文中)。如果您只想进行API调用并获取联系号码字典,那么似乎API正在为您充分处理。似乎API已经为您返回了电话号码字典。所以代码可以缩减为类似下面的代码。 (除非响应返回JSON,否则这些实现将失败)
func getCallCentreNumbers() {
API.getJudeContactNumbers { response in
self.judeCallCentreNumberDict = response
}
}