Ios Swift/NSURLSession JSON download/在展开可选值时意外发现nil
我正在下载数据并使用Ios Swift/NSURLSession JSON download/在展开可选值时意外发现nil,ios,swift,Ios,Swift,我正在下载数据并使用viewDidLoad()中的以下代码进行处理: 打印(dollarToDollarDict)打印出正确的词典打印(dollarToDollarString)打印出我想要的正确字符串:“可选(1.1303)” 但当我想通过按下按钮使用dollarToDollarString中的字符串时,使用: func dollarBtnFunc(button: UIButton!) { if dollarExchangeRateStr != "" { SpeedL
viewDidLoad()
中的以下代码进行处理:
打印(dollarToDollarDict)
打印出正确的词典<代码>打印(dollarToDollarString)打印出我想要的正确字符串:“可选(1.1303)”
但当我想通过按下按钮使用dollarToDollarString
中的字符串时,使用:
func dollarBtnFunc(button: UIButton!) {
if dollarExchangeRateStr != "" {
SpeedLog.print("DOLLAR downloaded", dollarExchangeRateStr)
let dollarExchangeRateDouble = Double(dollarExchangeRateStr)!
tableCounterData = ["\(numberInt) $", "\(numberInt * dollarExchangeRateDouble) €"]
} else if dollarExchangeRateStr == "" {
SpeedLog.print("DOLLAR not downloaded, Dollar = 0.89")
tableCounterData = ["\(numberInt) $", "\(numberInt * 0.89) €"]
}
currentButton = "dollarBtnFunc"
}
在让DollareExchangeDouble=Double(DollareExchangeStr)上展开可选值时,我意外地发现了nil代码>
我错过了什么?为什么字符串nil
?我之前已经打印了正确的值。。。当我以后想使用它时,为什么它不再是我字符串的一部分?非常感谢您的帮助。我相信您的问题在于如何将Dollare Exchange STR转换为Double。Double(“foo”)返回一个可选值,该值可能在转换时失败,因此为nil,强制展开时失败
改变
func dollarBtnFunc(button: UIButton!) {
if let exchangeRateStr = dollarExchangeRateStr {
SpeedLog.print("DOLLAR downloaded", exchangeRateStr )
let dollarExchangeRateDouble = Double(exchangeRateStr ) {
tableCounterData = ["\(numberInt) $", "\(numberInt * dollarExchangeRateDouble) €"]
}
else {
print("your string to double conversion failed")
}
} else if dollarExchangeRateStr == "" {
SpeedLog.print("DOLLAR not downloaded, Dollar = 0.89")
tableCounterData = ["\(numberInt) $", "\(numberInt * 0.89) €"]
}
currentButton = "dollarBtnFunc"
}
从您的评论来看,DollareExchangeRateStr也是可选的,这意味着您也需要将其展开,请注意如果让exchangeRateStr=DollareExchangeRateStr
干杯 我认为您的问题在于将Dollare Exchange Str转换为Dollare Exchange Str。Double(“foo”)返回一个可选值,该值可能在转换时失败,因此为nil,强制展开时失败
改变
func dollarBtnFunc(button: UIButton!) {
if let exchangeRateStr = dollarExchangeRateStr {
SpeedLog.print("DOLLAR downloaded", exchangeRateStr )
let dollarExchangeRateDouble = Double(exchangeRateStr ) {
tableCounterData = ["\(numberInt) $", "\(numberInt * dollarExchangeRateDouble) €"]
}
else {
print("your string to double conversion failed")
}
} else if dollarExchangeRateStr == "" {
SpeedLog.print("DOLLAR not downloaded, Dollar = 0.89")
tableCounterData = ["\(numberInt) $", "\(numberInt * 0.89) €"]
}
currentButton = "dollarBtnFunc"
}
从您的评论来看,DollareExchangeRateStr也是可选的,这意味着您也需要将其展开,请注意如果让exchangeRateStr=DollareExchangeRateStr
干杯 您的问题在于以下两行:
let dollarToDollarNSNumber = dollarToDollarDict.valueForKey("EUR")
let dollarToDollarString = String(dollarToDollarNSNumber)
dollarToDollarDict.valueForKey(“EUR”)返回可选值,因此dollartodollarnsumber
是可选值
使用可选参数调用字符串
初始值设定项会使字符串成为“可选(…)”
,因此,当您稍后将该字符串传递给双值
初始值设定项时,它会失败,因为其中包含字母
您需要通过执行以下操作来打开从valueForKey
获得的值:
if let dollarToDollarNSNumber = dollarToDollarDict.valueForKey("EUR") {
let dollarToDollarString = String(dollarToDollarNSNumber)
SpeedLog.print(dollarToDollarString)
self.dollarExchangeRateStr = dollarToDollarString
} else {
self.dollarExchangeRateStr = ""
}
您的问题存在于以下两行:
let dollarToDollarNSNumber = dollarToDollarDict.valueForKey("EUR")
let dollarToDollarString = String(dollarToDollarNSNumber)
dollarToDollarDict.valueForKey(“EUR”)返回可选值,因此dollartodollarnsumber
是可选值
使用可选参数调用字符串
初始值设定项会使字符串成为“可选(…)”
,因此,当您稍后将该字符串传递给双值
初始值设定项时,它会失败,因为其中包含字母
您需要通过执行以下操作来打开从valueForKey
获得的值:
if let dollarToDollarNSNumber = dollarToDollarDict.valueForKey("EUR") {
let dollarToDollarString = String(dollarToDollarNSNumber)
SpeedLog.print(dollarToDollarString)
self.dollarExchangeRateStr = dollarToDollarString
} else {
self.dollarExchangeRateStr = ""
}
这是一个打印扩展。is与print()
那么SpeedLog.print(“美元下载”,DollareExchangeStr)打印出来的是什么呢?DollarExchangeStr[405]:美元下载可选(0.88472)
试试让DollareExchangeRateDouble=Double(DollareExchangeStr!)<代码>无法强制展开非可选类型“字符串”的值。
它是打印扩展名。is与print()
那么SpeedLog.print(“美元下载”,DollareExchangeStr)打印出来的是什么呢?DollarExchangeStr[405]:美元下载可选(0.88472)
试试让DollareExchangeRateDouble=Double(DollareExchangeStr!)<代码>无法强制展开非可选类型“字符串”的值。
谢谢!不仅如此,你做到了。你解释了,所以我明白了。。。非常感谢你!非常感谢。不仅如此,你做到了。你解释了,所以我明白了。。。非常感谢你!