Swift2: ¿No se puede subcribir un valor del tipo '?'

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

resultados para

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

¿Cuál es la syntax correcta en Swift2?

Prueba esto:

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

aun mejor:

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

O:

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

leaderboardRequest.scores no está desenvuelto, desenvuelvalo antes de usar el subíndice.

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

"desenvolver" es un concepto key en Swift, va con Optionals.

El ? parte en [GKScore]? significa que esto es opcional. Contiene un valor o nada. Un Opcional no es el tipo que contiene, debe "extraer" el valor del Opcional, se llama "desenvolver".

Para desenvolver de forma segura el valor de un Opcional, use "if let" como lo hice, o "guard" que apareció en Swift 2, o encadenamiento opcional, etc. Hay muchas técnicas diferentes.

Todo esto se explica en el ebook y en el sitio de documentation de Swift Basics Apple.