ios - 填充单元格时无法展开可选

标签 ios swift

我讨厌发布这个,因为它看起来像基本的 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/

相关文章:

ios - 从另一个应用程序中的调用应用程序获取调用的电话号码

ios - 有必要实现imagePickerControllerDidCancel吗?

ios - 如何根据核心数据中的实体创建子类?

iOS:如何手动将 2D Float 数据设置为 MTLTexture 或 MPSImage?

ios - 键盘和 UI 元素高度的自动布局问题

javascript - 如何在页面加载时打开 iOS 键盘

ios - iOS 应用程序的 bundle 种子 ID 是什么?

ios - 使用链接创建动态单元格。

xcode - 如何使用 swift 从包中加载 applescript 文件?

ios - swift 2.1 alamofire超时方法