这不会编译:
我尝试过几种不同的东西; 声明Dictionary的不同方法,更改其类型以匹配数据的嵌套.我也试着明确说我
Any
是一个集合所以它可以下标.没有骰子.
import UIKit
import Foundation
class CurrencyManager {
var response = Dictionary<String,Any>()
var symbols = []
struct Static {
static var token : dispatch_once_t = 0
static var instance : CurrencyManager?
}
class var shared: CurrencyManager {
dispatch_once(&Static.token) { Static.instance = CurrencyManager() }
return Static.instance!
}
init(){
assert(Static.instance == nil, "Singleton already initialized!")
getRates()
}
func defaultCurrency() -> String {
let countryCode = NSLocale.currentLocale().objectForKey(NSLocaleCountryCode) as String
let codesToCountries :Dictionary = [ "US":"USD" ]
if let localCurrency = codesToCountries[countryCode]{
return localCurrency
}
return "USD"
}
func updateBadgeCurrency() {
let chanCurr = defaultCurrency()
var currVal :Float = valueForCurrency(chanCurr, exchange: "Coinbase")!
UIApplication.sharedApplication().applicationIconBadgeNumber = Int(currVal)
}
func getRates() {
//Network code here
valueForCurrency("", exchange: "")
}
func valueForCurrency(currency :String, exchange :String) -> Float? {
return response["current_rates"][exchange][currency] as Float
}
}
Run Code Online (Sandbox Code Playgroud)
Das*_*ash 19
我们来看看吧
response["current_rates"][exchange][currency]
Run Code Online (Sandbox Code Playgroud)
response
声明为Dictionary<String,Any>()
,因此在第一个下标之后,您尝试在Any类型的对象上调用另外两个下标.
解决方案1.将响应类型更改为嵌套字典.请注意,我添加了问号,因为无论何时访问字典项,您都会获得可选项.
var response = Dictionary<String,Dictionary<String,Dictionary<String, Float>>>()
func valueForCurrency(currency :String, exchange :String) -> Float? {
return response["current_rates"]?[exchange]?[currency]
}
Run Code Online (Sandbox Code Playgroud)
解决方案2.在解析时将每个级别转换为Dictionary.确保仍然检查是否存在可选值.
var response = Dictionary<String,Any>()
func valueForCurrency(currency :String, exchange :String) -> Float? {
let exchanges = response["current_rates"] as? Dictionary<String,Any>
let currencies = exchanges?[exchange] as? Dictionary<String,Any>
return currencies?[currency] as? Float
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12753 次 |
最近记录: |