let highscore = leaderboardRequest.scores[0] as! GKScore
结果
Cannot subscript a value of type '[GKScore]?'
Swift2中的正确语法是什么
答案 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 }