2016-11-12 2 views
1

Это следующий фрагмент кода:Где я ошибаюсь при преобразовании этого кода, чтобы он не помещал переменную в массив?

if let dict = json?["Stats"] as? [String:AnyObject] { 

     if let newdict = dict["biggestWin"] as? [[String : AnyObject]] { 
     self.bigWinPlayer1Goals = newdict.flatMap { $0["player1_goals"] as! String!} 
     print (self.bigWinPlayer1Goals) 
} 

выходы:

[ "1"]

Однако, что 1 содержится в массиве - это я не хочу. Поэтому я переписал код:

if let newdict = dict["biggestWin"] as? [String : AnyObject] { 
     let bigWinPlayer1Goals = newdict ["player1_goals"] as? String 
     print (bigWinPlayer1Goals!) 
} 

Однако это не работает и ничего не выводит.

Куда я иду не так?

Это массив в вопрос:

["Stats": { 
biggestWin =  (
      { 
     "player1_goals" = 1; 
     "player2_goals" = 2; 
    } 
); 
goalDifference = "-17"; 
goalsConceded = 32; 
goalsScored = 15; 
totalDraws = 3; 
totalLosses = 10; 
totalWins = 1; 
winPercentage = "7.14%"; 
}] 

Я хотел бы иметь возможность хранить player1_goals и player2_goals в двух отдельных переменных.

+0

Пожалуйста, разместите используемые данные и ваш ожидаемый результат должен выглядеть так: – shallowThought

ответ

2

Значение, возвращаемое dict["biggestWin"], относится к типу [String: AnyObject]], то есть Array of AnyObject s.

if let data = dict["biggestWin"] as? [[String : AnyObject]] { 
    let newdict = data.first! 
    let bigWinPlayer1Goals = newdict ["player1_goals"] as? String 
    print (bigWinPlayer1Goals!) 
} 
+0

Отлично! Спасибо. Поэтому мне не хватало команды .first. Что именно это делает? (кроме исправления моего кода!) Просто верните первое в массиве? – Northfield82

+0

Возврат 'Optinal', содержащий первый элемент массива if exists или nil otherwize. https://developer.apple.com/reference/swift/array – shallowThought