Swift2:不能下标'[GKScore]类型的值吗?

时间:2016-02-22 15:48:50

标签: ios swift

let highscore = leaderboardRequest.scores[0] as! GKScore

结果

Cannot subscript a value of type '[GKScore]?'

Swift2中的正确语法是什么

2 个答案:

答案 0 :(得分:3)

leaderboardRequest.scores未打开,在使用下标之前将其解包。

if let scores = leaderboardRequest.scores {
    if let highscore = scores.first as? GKScore {
        // safely use `highscore` here
    }
}

"解缠"是Swift中的一个关键概念,它与Optionals一起使用。

?中的[GKScore]?部分表示这是一个可选项。它包含值或nil。一个可选的不是它所拥有的类型,你必须提取"提取"来自Optional的值,它被称为" unwrapping"。

要从Optional中安全地展开值,请使用"如果让"就像我一样,或者"守卫"它出现在Swift 2中,或者是可选的链接等。有很多不同的技术。

所有这些都在Swift Basics Apple电子书和文档站点中进行了解释。

答案 1 :(得分:2)

试试这个:

let highscore = leaderboardRequest.scores?[0] as! GKScore

更好:

if let highscore = leaderboardRequest.scores?[0] {
    //your code
}

或者:

guard let highscore = leaderboardRequest.scores?[0] else { return }