2016-04-15 12 views
-1

Swift言語の愛するファンとプログラマー。私は、要素がforループで配列内に現れるアルゴリズムの回数を定式化しようとしましたが、うまくいかないようです。次のようにswiftの配列内の結果を取得するループが機能しない

私のコードは次のとおりです。

else if indexPath.section == 1 { 
      cell = tableView.dequeueReusableCellWithIdentifier("GreenCell", forIndexPath: indexPath) 
      for item in theModel.userAnswer { 
       numOfCoincidences[item] = (numOfCoincidences[item] ?? 0) + 1 
      } 

      for (numLangs, value) in numOfCoincidences { 
       txtSummary = "#languages spoken: \(numLangs)" 
       txtSummary2 = "# of People: \(value)" 

      } 

      cell.textLabel?.text = txtSummary 
      cell.detailTextLabel?.text = txtSummary2 

私は表のセルにこの情報を表示しようとしていますが、それは動作しません。私は自分のアルゴリズムが役に立つと思った。助言がありますか?

私は次のような結果を得ています:1つの画面にデータを入力し、そのデータをテーブルに出力するナビゲーションコントローラがあります。これは、私がユーザーに自分の名前と話されている言語の数を入力させるための調査のビットです。私はMVCプログラミング手法を使用しています。

そうモデルで、ここのコードです:入力画面で

import Foundation 

class Model { 


    var userName = [String]() 
    var userAnswer = [String]() 
    var userInfo = [String]() 
    var name:String 
    var answer:String 

    init(){ 
     self.name = "" 
     self.answer = "" 

    } 

    func addUserInfo(name:String, answer:String) -> Void { 
     userName.append(name) 
     userAnswer.append(answer) 
    } 

} 

、私は、ユーザー名と話される言語の数の入力を求める2つのテキストボックスを持っています。だから出力画面で、2人が4言語を話すならば、出力はそれを反映するはずですが、そうではありません。 1人が3つの言語を話す場合、それはそれを表示しなければなりません。出力が完全に間違って出力されています。ここでデータ入力コードのためのものである:

import UIKit 

class ViewController: UIViewController { 

    var model = Model() 

    @IBOutlet var txtName: UITextField! 
    @IBOutlet var lblStatus: UILabel! 

    @IBOutlet var txtAnswer: UITextField! 
    @IBAction func btnAnswer(sender: UIButton) { 
     model.answer = txtAnswer.text! 
     model.name = txtName.text! 
     if ((txtName.text)! == "" || (txtAnswer.text)! == "") { 
      lblStatus.text = "Name and answer are both required" 
     }else if model.userName.contains(model.name) { 
      lblStatus.text = "Answer already recorded for \(model.name)" 
     } else { 
      model.addUserInfo(model.name, answer: model.answer) 
      lblStatus.text = "Ok, \(model.name) answered \(model.answer)" 
     } 
     txtAnswer.text = "" 
     txtName.text = "" 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "toReesultsController" { 
      let vc = segue.destinationViewController as! TableViewController 
      vc.theModel = self.model 

     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 


} 

以下に示すようなデータ入力画面から入力されたデータを表示するテーブルのコードは表に示される:

import UIKit 

class TableViewController: UITableViewController { 

    var theModel = Model() 
    var numOfCoincidences:[String:Int] = [:] 
    var txtSummary:String = "" 
    var txtSummary2:String = "" 
    var greatest:Int = 0 

    /* override func viewDidLoad() { 
     for index in 0..<theModel.userName.count { 

     } 
    }*/ 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 3 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if section == 0 { 
      return theModel.userAnswer.count 
     } else if section == 1 { 
      return theModel.userAnswer.count 
     } else if section == 2{ 
      return theModel.userAnswer.count 
     } else { 
      return 0 
     } 
    } 

    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 

     if section == 0 { 
      return "Answer Log" 
     } else if section == 1 { 
      return "Summary" 
     } else if section == 2 { 
      return "Top Answers" 
     } else { 
      return nil 
     } 

    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     var cell:UITableViewCell! = nil 

     if indexPath.section == 0 { 
      cell = tableView.dequeueReusableCellWithIdentifier("BlueCell", forIndexPath: indexPath) 
      cell.textLabel?.text = "\(theModel.userName[indexPath.row]):\(theModel.userAnswer[indexPath.row])" 
     } else if indexPath.section == 1 { 
      cell = tableView.dequeueReusableCellWithIdentifier("GreenCell", forIndexPath: indexPath) 
      for item in theModel.userAnswer { 
       numOfCoincidences[item] = (numOfCoincidences[item] ?? 0) + 1 
      } 

      for (numLangs, value) in numOfCoincidences { 
       txtSummary = "#languages spoken: \(numLangs)" 
       txtSummary2 = "# of People: \(value)" 

      } 

      cell.textLabel?.text = txtSummary 
      cell.detailTextLabel?.text = txtSummary2 



     } else if indexPath.section == 2 { 
      cell = tableView.dequeueReusableCellWithIdentifier("OrangeCell", forIndexPath: indexPath) 
      greatest = 0 
      for index in 0..<theModel.userAnswer.count { 

       if Int(theModel.userAnswer[index])! > greatest { 
        greatest = Int(theModel.userAnswer[index])! 
       } 
      } 
      cell.textLabel?.text = "Answer with most votes is \(greatest) languages spoken." 

     } 



     return cell 
    } 

} 
+0

こんにちはマット、その声明はどういう意味ですか? – Linuxn00b

+1

あなたの入力内容と出力内容を表示します。そうすれば、私たちはそれを遊び場で実行し、あなたに確かな答えを与えることができます。 – ryantxr

+0

アプリをデモンストレーションするために画像/ビデオの入出力を表示しても問題ありませんか? – Linuxn00b

答えて

0

ものに基づいてあなたが共有している、あなたの入力にいくつかの前提を作るこれはあなたが望むことを行うようだ。

各項目が下記のキーを持つ辞書である場合。その後、配列を歩き、人が話す言語の数を取得します。私はそれが実際に何であるかを数値(Int)として定義することを選択しました。

これは元のコードとほとんど同じですので、あなたの考えは正しいと判断しなければなりませんが、あなたの実装には何かが欠落していました。

let a = [["name":"carla", "langs" : 3], ["name":"scott", "langs" : 3], ["name":"brad", "langs" : 1], ["name":"cynthia", "langs":2]] 

var numOfCoincidences = [Int: Int]() 
for item in a { 
    let numLangs = item["langs"] as! Int 
    numOfCoincidences[numLangs] = (numOfCoincidences[numLangs] ?? 0) + 1 

} 

var txtSummary = "" 
var txtSummary2 = "" 
for (numLangs, value) in numOfCoincidences { 
    // You should also note that you are overwriting values here. 
    txtSummary = "#languages spoken: \(numLangs)" 
    txtSummary2 = "# of People: \(value)" 
    print(txtSummary) 
    print(txtSummary2) 
} 
numOfCoincidences 

は出力::

// key := number of languages spoken 
// value := number of people who speak that many languages 
[2: 1, 3: 2, 1: 1] 

あなたがcellForRowAtIndexPathで問題を持っていますこれはあなたの入力であると仮定すると、

すべてのデータを通して、あなたのループが完了したら、次の操作を行います。

 cell.textLabel?.text = txtSummary 
     cell.detailTextLabel?.text = txtSummary2 

したがって、すべてのセルは、ループの最後の値を持っているとしています。

+0

ライアンさん、ありがとうございます。 – Linuxn00b

関連する問題