0
我試過很多方法從現有數組中隨機生成一個數組。而其中的一個終於摸索出了我:隨機生成的數組只能在按鈕上工作
extension Array {
mutating func shuffle() {
// get data from my FireBase and calculate amount of items in it
var ref: DatabaseReference?
var databaseHandle: DatabaseHandle?
var words = [lWord]()
ref = Database.database().reference()
guard let uid = Auth.auth().currentUser?.uid else {
print ("smt wrong with user uid")
return
}
databaseHandle = ref?.child("Users").child(uid).child("LearningNow").observe(.value, with: { (snapshot) in
var newItems: [lWord] = []
for item in snapshot.children {
let wordItem = lWord(snapshot: item as! DataSnapshot)
newItems.append(wordItem)
}
words = newItems
})
let count = words.count + 1
for _ in 0..<count {
sort { (_,_) in arc4random() < arc4random() }
}
}
}
但是,由於種種原因,該代碼的工作只有當我把這個方法陣列上的按鈕操作的內部,例如:
@IBAction func generate(_ sender: UIButton) {
words.shuffle()
print (words)
}
如果在viewDidLoad
中輸入完全相同的代碼,則不會進行排序。那麼我怎樣才能排序我的陣列沒有任何行動?
P.S.如果你不知道答案,你可以推薦任何其他的方法來產生隨機數組。謝謝!
你沒有看到''smt用戶uid錯誤''打印輸出,是嗎? – dasblinkenlight
不,我不知道。 Firebase正常工作 –
最可能的問題是'viewDidLoad'中執行的更改被稍後執行的代碼覆蓋。看看是否將相同的代碼放入'viewWillAppear'中可以解決問題。 – dasblinkenlight