【SwiftUI】TextFieldに入力された値を数値として扱う方法

この記事は約4分で読めます。

TextFieldで数値を扱うには、formatに”.number”を指定します。

整数を入力するコード例

TextFieldの引数としているinputIntを宣言する際にInt型で初期化すると、整数を扱うことができます。
後述しますが、inputIntをDouble型で宣言すると実数を扱うことができます。

import SwiftUI

struct TextFieldSample: View {
    @State var inputInt: Int = 0
    var body: some View {
        VStack {
            TextField("整数", value: $inputInt, format: .number)
            Text("入力値:\(inputInt)")
        }
    }
}

実数を入力するコード例

TextFieldのvalueの値を実数で宣言することで、実数を入力することができます。
ただし、デフォルトでは小数点以下6桁までしか扱えません。

import SwiftUI

struct TextFieldSample: View {
    @State var inputDouble: Double = 0.0
    var body: some View {
        VStack {
            TextField("実数", value: $inputDouble, format: .number)
            Text("入力値:\(inputDouble)")
        }
    }
}

桁数を指定して実数を扱う

先述したコード例では、小数点以下6桁までしか扱うことができませんでした。

扱う桁数を変更したい時は以下のモディファイアを使用します。

.precision(.significantDigits(x))

整数部も含めた有効桁数を指定することができます。
format部分の引数に以下のように記述します。

.number.precision(.significantDigits(10))

コード例

以下のコード例では、有効桁数を10桁としています。
整数部も含めた有効桁数のため、整数部が”123″などの3桁の値の場合、小数点以下は7桁までしか扱いません。

import SwiftUI

struct TextFieldSample: View {
    @State var inputDouble1: Double = 0.0
    var body: some View {
        VStack {
            //.precision(.significantDigits(??))の??部分に指定した値が有効桁数となる
            TextField("実数(桁指定)", value: $inputDouble1, format: .number.precision(.significantDigits(10)))
            //%.10fで小数点以下10桁まで表示するように指定する
            Text("入力値:\(String(format: "%.10f", inputDouble1))")
        }
    }
}

.precision(.fractionLength(x))

小数点以下の有効桁数を指定することができます。
format部分の引数に以下のように記述します。

.number.precision(.fractionLength(10))

コード例

小数点の桁数を指定しています。
significantDigitsと異なり、整数部の桁数は関係なく、整数部に”123″が入力されていても小数点以下の値に10桁まで入力することができます。

import SwiftUI

struct TextFieldSample: View {
    @State var inputDouble2: Double = 0.0
    var body: some View {
        VStack {
            //.precision(.fractionLength(??))の??部分に指定した値が小数点以下の桁数となる
            TextField("実数(桁指定)", value: $inputDouble2, format: .number.precision(.fractionLength(10)))
            //%.10fで小数点以下10桁まで表示するように指定する
            Text("入力値:\(String(format: "%.10f", inputDouble2))")
        }
    }
}
タイトルとURLをコピーしました