我讨厌发布这个,因为它看起来像基本的 Swift,但是,我找不到解包这个可选的方法,我知道它可能与 NSUserDefaults 存储它的方式有关,但我不确定.
我正在这样保存一个 [String]:
NSUserDefaults.standardUserDefaults().setObject(infectedNamesArray, forKey: "infectedNamesArray")
然后这样记忆:
if let infected = NSUserDefaults.standardUserDefaults().objectForKey("infectedNamesArray")
{
infectedNamesArray = infected as! [String]
}
我正在使用数组来填充这样一个可重复使用的单元格:
switch whichScoreSet
{
case 0:
cell.nameLabel.text = "Test"
cell.scoreLabel.text = "Test"
case 1:
cell.nameLabel.text = infectedNamesArray[indexPath.row]
cell.scoreLabel.text = "\(infectedGameScoreTotals["\(infectedNamesArray[indexPath.row])"]!)"
case 2:
cell.nameLabel.text = "Test"
cell.scoreLabel.text = "Test"
default:
print("Something Went Wrong")
}
一切正常,我可以在表数据和加载 View 之间切换。从 cell.nameLabel.text 查看数据时,它始终显示可选。即可选的(valueFromArray)
我试图强制解包,但 Xcode 告诉我无法解包字符串。我曾尝试将其转换为字符串,但 Xcode 告诉我这没有任何区别,因为它已经是一个字符串。
我对这个基本的 Swift 不知所措,所以请原谅这个问题。来自许多其他 SO 帖子的技术提供了相同的结果。
我在这里忽略了什么?
已编辑
变量在类之外声明。
var infectedNamesArray = [String]()
最佳答案
infectedNamesArray[indexPath.row]
应该是安全的,所以你可以直接使用它
let infectedName = infectedNamesArray[indexPath.row]
cell.nameLabel.text = infectedName
infectedGameScoreTotals
中键 infectedName
的值可能会丢失并且是可选的,因此请尝试
let scoreTotal = infectedGameScoreTotals[infectedName]
cell.scoreLabel.text = scoreTotal != nil ? "\(scoreTotal!)" : "n/a"
n/a
是在字典键不可用时显示的占位符。
关于ios - 填充单元格时无法展开可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37123861/