2016-09-23 10 views
7

私は、2つのスライダーバーとユーザーが選んだセグメント化されたコントロールの間で基本的な計算を行いたいというアプリ内のシーンを持っています。私は、セグメント化されたコントロールの下で変数間の数学をやろうとしていますが、Xcodeは私に与えている(!)未解決識別子のセグメント化されたコントロールでの未解決の識別子の使用

使用を述べ、私はしようとしているものは何でも変数と

を「XXXX」たす。 私のコードは次のとおりです。私がやろうとしています何

import UIKit 

class DopamineCalculator: UIViewController { 

//slider outlets 
@IBOutlet weak var slider: UISlider! 
@IBOutlet weak var sliderone: UISlider! 
//segmentoutlet 
@IBOutlet weak var segmentoutlet: UISegmentedControl! 


//LABELS 
//weight label 
@IBOutlet weak var weightlabel: UILabel! 
//dosage label 
@IBOutlet weak var dosagemg: UILabel! 
//Drip Rate Answer Label 
@IBOutlet weak var dripanswer: UILabel! 




//ACTIONS!! 
//weight slider action 
@IBAction func weightslider(sender: UISlider) { 

    let weight = Int(sender.value) 
    //converts to kgs 
    let kgs = Int(sender.value)/Int(2.2) 

    weightlabel.text = "\(weight) lbs" 
} 


//Dosage Desired dosage slider 

@IBAction func dosagedesired(sender: UISlider) { 

    let dosage = Int(sender.value) 



    dosagemg.text = "\(dosage) mg" 
} 


//CONCENTRATION OPTIONS 
@IBAction func concentrationoption(sender: UISegmentedControl) { 
     switch segmentoutlet.selectedSegmentIndex 
     { 
     case 0: 


      dripanswer.text = (kgs) * (dosage)/800 


     case 1: 


      dripanswer.text = "1600"; 



     case 2: 


      dripanswer.text = "3200"; 

     default: 
      break; 
    } 
} 

は、それぞれの場合について、それぞれキログラムX線量/ 800です。私は解決されていない識別子の問題にオンラインで適切な解決策を見つけることができません。

+0

'dosage'はローカル変数で、' dosagedesired'アクションのスコープ(中括弧のペア内)でのみ表示されます。あなたがインスタンス変数 – vadian

+0

を必要とすることをクラス内で見えるようにするには、警告またはエラーなしに 'dosage'を使用できますか? –

+0

インスタンス変数を作成するにはどうすればよいですか? はい、私はMr.UBです。ちょうど分割コントロールの下にありません – beans217

答えて

2
@IBOutlet ... 

// Add variables to be reachable for all methods  
var dosage : Int = 0 
var kgs : Double = 0.0 
var divisor : Double = 800.0 

@IBAction func dosagedesired(sender: UISlider) { 

    // prepend self to variable as it is used 
    self.dosage = Int(sender.value) 
    dosagemg.text = "\(self.dosage) mg" 
    // adding the calculation here 
    let result = self.kgs * Double(self.dosage)/self.divisor 
    dripanswer.text = "\(result)" 
} 

@IBAction func weightslider(sender: UISlider) { 
    let weight = Int(sender.value)  
    // converts to kgs 
    // the same here 
    self.kgs = Int(sender.value)/Int(2.2) 
    // adding the calculation here 
    let result = self.kgs * Double(self.dosage)/self.divisor 
    dripanswer.text = "\(result)" 
} 

@IBAction func concentrationoption(sender: UISegmentedControl) { 

    switch segmentoutlet.selectedSegmentIndex 
    { 
     case 0:     
      self.divisor = 800.0    
     case 1: 
      self.divisor = 1600.0 
     case 2: 
      self.divisor = 3200.0 
     default: 
      self.divisor = 800.0 
    } 
    // finally the calculation 
    let result = self.kgs * Double(self.dosage)/self.divisor 
    dripanswer.text = "\(result)"    
} 
+0

ありがとうございました! – beans217

+0

完璧にありがとうございます。ユーザーがスライダーバーを変更したときに「回答ラベル」を更新できるようにここに入力する必要のあるコードがありますか? – beans217

+1

@ beans217あなたのスライダーは現在どのように機能していますか? UILabelの価値を更新していないのですか、それとも実際に何が必要ですか?まったく新しい問題であれば、別の質問を投稿する可能性があります。 – pedrouan

1

あなたは変数を宣言kgsし、クラスレベルで、すなわち、任意の方法のdosage外、あなたの店舗とともに

//slider outlets 
@IBOutlet weak var slider: UISlider! 
@IBOutlet weak var sliderone: UISlider! 
//segmentoutlet 
@IBOutlet weak var segmentoutlet: UISegmentedControl! 

//LABELS 
//weight label 
@IBOutlet weak var weightlabel: UILabel! 
//dosage label 
@IBOutlet weak var dosagemg: UILabel! 
//Drip Rate Answer Label 
@IBOutlet weak var dripanswer: UILabel! 

// You should declare the variables here: 
var kgs = 0 
var dosage = 0 

そして、あなたはあなたのメソッド内kgsdosageを使用する場合、単語を削除する必要があります変数を宣言していないため、letです。

これを行う理由は、別のメソッドのメソッドで宣言された変数にアクセスできないためです。 concentrationoptionメソッドではdosagedesiredメソッドで定義されているdosageにアクセスすることはできません。

+0

よかった、ありがとう! – beans217

+1

@ beans217私の答えがあなたの質問に答えると思うなら、そのチェックマーク – Sweeper

+0

をクリックしてそれを受け入れることを検討してください。しかし、2番目の答えは私が達成しようとしていたものをより正確に助けました。しかし、あなたの入力をありがとう。 – beans217

関連する問題