2017-08-10 16 views
1

A、B、C、Dを表示するクイズゲームのようなものを作成しました。問題はA、B、C、注文。A、B、C、Dラベルを順番に表示する:Swift

enter image description here

これは私がそれらを表示するために使用するコードです:

for (buttonIndex, value) in model.answers.enumerated() { 
     let id = value.key 
     let answer = value.value 

     answersKeys.append(id) 
     print(id) 

     let answerLabel = UILabel() 
     answerLabel.text = answer 

     let answerButton = UIButton() 
     let imageNormal = UIImage(named: "circle_empty") 
     let imageSelected = UIImage(named: "circle_filled") 

     answerButton.setImage(imageNormal, for: .normal) 
     answerButton.setImage(imageSelected, for: .selected) 
     answerButton.tag = buttonIndex // (2) store current button index as tag 
     answerButton.setTitleColor(.black, for: .normal) 
     answerButton.addTarget(self, action: #selector(answerPressed(_:)), for: .touchUpInside) 
     answersStack.addArrangedSubview(answerLabel) 
     answersStack.addArrangedSubview(answerButton) 


    } 

私はからそれらを呼び出すためにデータベースを使用し、私は、データベースが(それがそれを示してそれらを正しく示していることを確認していますこれはおそらく非常に簡単な修正ですが、解決策を見つけることができませんでした。あなたの助けは大いに感謝しています。 〜ありがとう

+1

あなたのコードに表示されていることによると、 'model'変数は' Dictionary'ではありませんか? 'Dictionary'は順序付けられていないデータ構造なので、値を挿入したときに同じ順序で来ることを意味するわけではありません –

+0

それらを列挙して実際にそれらを順番に出力するかどうかチェックしましたか?それはあなたが見ている問題の理由かもしれません – cyril

+0

ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええと – josh

答えて

2

keyvalueプロパティを呼び出すので、コードに従って、mode変数はDictionaryタイプです。

私のコメントで前に述べたように、Dictionaryタイプは順序付けされていないデータ構造です。したがって、値を挿入しても、挿入した順序と同じではありません。のは、次の例を見てみましょう:

let dict: [Int: String] = [ 
    0: "D", 
    1: "A", 
    2: "C", 
    3: "B" 
] 

print(dict.enumerated().map { ($0, $1) }) 

この印刷コンソールへ:

[(0, (key: 2, value: "C")), (1, (key: 0, value: "D")), (2, (key: 1, value: "A")), (3, (key: 3, value: "B"))] 

あなたは私たちは辞書に挿入されている値の順序が完全に異なっている見ることができるように。

あなたが列挙を並べ替えるのであれば、あなたは、次の例を参照して、その値に関する発注のご期待どおりの結果を持つことができます。

print(dict.enumerated().sorted { $0.0.element.value < $0.1.element.value }) 

この印刷コンソールへ:

[(offset: 2, element: (key: 1, value: "A")), (offset: 3, element: (key: 3, value: "B")), (offset: 0, element: (key: 2, value: "C")), (offset: 1, element: (key: 0, value: "D"))] 

の列挙dictはその値によって順序付けられます。

我々は同じロジックを適用し、我々はoffsetを省略するmapを作るのであれば、私たちは次のコードを取得することができます。コンソールのvalueが注文offsetvalue

let orderedDict = dict.enumerated().sorted { $0.0.element.value < $0.1.element.value } 

for (index, value) in orderedDict { 
    print(index, value.value) 
} 

そして、この印刷:

2 A 
3 B 
0 C 
1 D 

私はこれがあなたを助けてくれることを望みます。

+0

@josh私は何を意味するのか分かりません、より具体的になりますか? –

+0

私はQuestionという構造体を持っています。彼らには答えのようなものがたくさんあります。私はdictをそこに置き、それをQuestion Cellで呼び出そうとするとそれを見つけることができません。エラー:未解決の識別子の使用 – josh

+0

私が尋ねようとしていることを理解していますか? – josh

関連する問題