2017-01-03 12 views
-2

私はそれぞれ異なる浮動小数点値を提供する26のテキストフィールドを持っています。より簡単になるようにループを作成したいのですが、&はこれらの値を1つの変数にすばやく追加できます。Swift 3は、増加しているテキストフィールド名を認識させる方法を教えてください。

私のテキストフィールドの名前はa1、a2、... a26なので、変更する唯一のものは 'a'の後の数字です。どのように私は変数 'x'を増やしているように、テキストフィールド名を認識するために迅速に行うことができます。

私はこのような何かを考えていた:私の考えは明らかに、すべての26個のテキストフィールドを含む配列を作成し、それらを反復

+3

すべての26個のテキストフィールドを含む配列を作成し、それらを反復に。 – Alexander

+3

さらに配列やループを使って*始める*ので、決して26個すべてを別々の変数にする必要はありません。 – jtbandes

答えて

2

が動作していない

var x : Int = 1 
    var total : Float = 0; 
    var y : Float = 0; 


    while (x == 26) { 

     y = a/(x).floatValue; 
     total += y; 

     x+=1; 
    } 

を:

let textfields = [a1, a2, ..., a26] 
for textfield in textfields { 
    total += textfield.floatValue 
} 
+0

'let total = textFields.reduce(0){v、textField.text.floatValueのv、textField}はスウィフトです – EmilioPelaez

+0

@EmilioPelaezええ、私は故意にそれを選びました:1)おそらくOPより先行すると決めましたレベル2) 'total'がivarの場合、reduceを使用するとあなたにはあまり購入しません。とにかく変更可能でなければならない – Alexander

1

私は@jtbandesのコメントには、配列やループから始めることが最善であることに同意します。したがって、すべての変数を別々の変数にする必要はありません。 textFieldsが@IBOutletである場合は、アウトレットコレクション(すべてのtextFieldを保持する1つの配列)を使用できます。

@IBOutlet var textfields: [NSTextField]! 

は、その後、あなたは単にやるだろう:

for textfield in textfields { 
    total += textfield.floatValue 
} 

何ができるかを示すの関心では、テキストフィールドは、(とあなたのクラスがNSObjectから派生)クラスのプロパティであると仮定すると、 キー値コーディングを使用して値を取得することができます。

for i in 1...26 { 
    if let tf = value(forKey: "a\(i)") as? NSTextField { 
     total += tf.floatValue 
    } 
} 

MacOSののための完全な例:

import Cocoa 

class ViewController: NSViewController { 
    var a1 = NSTextField() 
    var a2 = NSTextField() 
    var a3 = NSTextField() 

    func total() { 
     // give them some values for testing purposes 
     a1.stringValue = "1.2" 
     a2.stringValue = "2.3" 
     a3.stringValue = "3.14" 

     var total: Float = 0.0 

     for i in 1...3 { 
      if let tf = value(forKey: "a\(i)") as? NSTextField { 
       total += tf.floatValue 
      } 
     } 

     print(total) 
    } 
} 

ViewController().total() // 6.64 

のiOSのための完全な例:

import UIKit 

class ViewController: UIViewController { 
    var a1 = UITextField() 
    var a2 = UITextField() 
    var a3 = UITextField() 

    func total() { 
     // give them some values for testing purposes 
     a1.text = "1.2" 
     a2.text = "2.3" 
     a3.text = "3.14" 

     var total: Float = 0.0 

     for i in 1...3 { 
      if let tf = value(forKey: "a\(i)") as? UITextField { 
       total += ((tf.text ?? "") as NSString).floatValue 
      } 
     } 

     print(total) 
    } 
} 

ViewController().total() // 6.64 
関連する問題