2016-02-22 4 views
3

let highscore = leaderboardRequest.scores[0] as! GKScoreSwift2: Невозможно подстроить значение типа '[GKScore]?'

результаты в

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

Что такое правильный синтаксис в Swift2

+0

Я код для своих детей, так что я не хватает Swift словарный запас. Что разворачивается? – user594883

+0

Я подробно ответил на вопрос. – Moritz

+0

@ user594883 Развертывание принимает реальное значение (не ноль) из необязательного значения (может быть nil), используя как! для разворачивания приведет к сбою, если это значение равно нулю. –

ответ

2

Попробуйте это:

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

еще лучше:

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

Или:

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

leaderboardRequest.scores не разворачивали, разворачивать его перед использованием подстрочный.

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

«разворачивание» - это ключевая концепция в Swift, она поставляется с опциями.

? часть в [GKScore]? означает, что это необязательно. Он содержит либо значение, либо значение nil. Необязательный - это не тот тип, который он держит, вам нужно «извлечь» значение из опции «Дополнительно», оно называется «разворачивание».

Чтобы безопасно разворачивать значение с помощью опции «Дополнительно», используйте «if let», как и я, или «guard», который появился в Swift 2, или, возможно, цельное соединение и т. Д. Существует много разных методов.

Все это объясняется в книге «Быстрые основы Apple» и сайте документации.

Смежные вопросы