2016-07-30 2 views
-2

Использование Swift 2, у меня есть следующий код:SwiftyJSON Перемешать

var datas = SwiftyJSON.JSON(json) 

// now datas has products. I need to shuffle products and get them in random order 

datas["products"] = datas["products"].shuffle() 

К сожалению, это не сработало.

Любая помощь, чтобы заставить ее работать?

+2

Где делает 'перетасовать() 'метод? Как это «не работает»? –

ответ

1

Я считаю, что с SwiftyJSON получить JSON объект типа массива в стрижа вы должны делать

datas["products"].array or datas["products"].arrayValue 

Вы расширив класс массива, чтобы иметь метод воспроизведения в случайном порядке в первую очередь? Если нет, то вы могли бы сделать что-то вроде этого

extension CollectionType { 
    /// Return a copy of `self` with its elements shuffled 
    func shuffle() -> [Generator.Element] { 
     var list = Array(self) 
     list.shuffleInPlace() 
     return list 
    } 
} 

extension MutableCollectionType where Index == Int { 
    /// Shuffle the elements of `self` in-place. 
    mutating func shuffleInPlace() { 
     // empty and single-element collections don't shuffle 
     guard count >= 2 else { return } 
     for i in 0..<count - 1 { 
      let j = Int(arc4random_uniform(UInt32(count - i))) + i 
      guard i != j else { continue } 
      swap(&self[i], &self[j]) 
     } 
    } 
} 

Source. Различия: If заявление изменено на guard.

Вы могли бы сделать что-то вроде этого

let shuffled = (datas["products"].array!).shuffle() 

Или, если вы хорошо используете IOS 9 API, вы можете сделать следующее без каких-либо расширений:

let shuffled = GKRandomSource.sharedRandom().arrayByShufflingObjectsInArray(datas["products"].array!) 
+1

Способы перетасовки скопированы дословно из ответов на http://stackoverflow.com/questions/24026510/how-do-i-shuffle-an-array-in-swift. Вы должны добавить ссылки на эти ответы для правильной атрибуции, иначе это считается плагиатом. Дополнительную информацию см. На странице http://stackoverflow.com/help/referencing. –

+0

Я решал, какой источник процитировать ... этот код повсюду @MartinR. Я просто задал вопрос, который вы связали. – modesitt

+0

Вы внесли ошибку в свою модификацию: 'guard count> 2' должно быть' guard count> = 2'. –

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