質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.84%

  • Swift

    6501questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    3760questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    3692questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

UITextfieldでInt型の計算を行いたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 230

snoopy_robot

score 2

UITextFieldから値を取得して、Int型の計算を行いたいです。

環境
xcode 9
swift4
iOS 11.2

import UIKit
import AVFoundation

class TimerViewController: UIViewController{

    var timer = Timer()                 // Timerクラス
    var startTime: TimeInterval = 0     // Startボタンを押した時刻
    var elapsedTime: Double = 0.0       // Stopボタンを押した時点で経過していた時間
    var watchtime : Double = 0.0        // 残り時間
    var timertime : Double = 0.0        // 設定された時間

    //画面に配置する部品類
    @IBOutlet weak var labelTimer: UILabel!     // 経過時間を表示するラベル
    @IBOutlet weak var buttonStart: UIButton!   // Startボタン
    @IBOutlet weak var buttonStop: UIButton!    // Stopボタン
    @IBOutlet weak var SaveCodeH: UITextField!  // 残り時間のフィールド(時間)
    @IBOutlet weak var SaveCodeM: UITextField!  // 残り時間のフィールド(分)
    @IBOutlet weak var SaveCodeS: UITextField!  // 残り時間のフィールド(秒)

    override func viewDidLoad() {
        super.viewDidLoad()
        self.SaveCodeH.keyboardType = UIKeyboardType.numberPad // 数字キーボードにする
        self.SaveCodeM.keyboardType = UIKeyboardType.numberPad
        self.SaveCodeS.keyboardType = UIKeyboardType.numberPad
        // Do any additional setup after loading the view.

    }


    // Startボタンを押した時の処理
    @IBAction func tapStart() {

        // Startボタン、Resetボタンを無効化
        buttonStart.isEnabled = false
        // Stopボタンを有効化
        buttonStop.isEnabled = true
        // Startボタンを押した時刻を保存
        startTime = Date().timeIntervalSince1970
        // 0.01秒おきに関数「update」を呼び出す
        timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)

    }

    // 0.01秒ごとに呼び出される処理
    @objc func update() {

        // 設定された時間を保存
        var SaveH = SaveCodeH;
        var SaveM = SaveCodeM;
        var SaveS = SaveCodeS;
        let Hour = SaveH * 3600
        let Second = SaveM * 60
        let watchB = Float(Float(Hour)+Float(SaveM)+Second)
        let watchH = Int(Int(watchB)%60)
        let watchM = Int((Int(watchB)-(watchH * 60)))
        let watchS = Int((Int(watchB)-(watchH*60))-(Int(watchB)-watchM))

        // 経過時間は以下の式で計算する
        // (現在の時刻 - Startボタンを押した時刻) + Stopボタンを押した時点で経過していた時刻
        let time = Date().timeIntervalSince1970 - startTime + elapsedTime
        // 時間を小数点前後で分割(小数点以下は2桁だけ取得)

        let sec = Int(time)
        let msec = Int((time - Double(sec)) * 100)
        // 「XX:XX:XX.XX」形式でラベルに表示する
        let displayStr = NSString(format: "経過時間 %02d:%02d:%02d.%02d", sec/3600, (sec%3600)/60, sec%60, msec) as String
        labelTimer.text = displayStr

        //stopwatch部分

        //残り時間は以下の式で計算する
        let measureH = Int(watchH - (sec/3600))
        let measureM = Int(watchM - ((sec%3600)/60))
        let measureS = Int(watchS - (sec%60))

        let Path = Bundle.main.bundleURL.appendingPathComponent("Fun.m4r")
        var Player = AVAudioPlayer()

        //時間が来たら音を鳴らす(計測は停止しない)
        if ( watchH == 0 && watchM == 0 && watchS == 0) {

                do{
                    Player = try AVAudioPlayer(contentsOf: Path, fileTypeHint: nil)
                    Player.play()
                }catch{
                    print("error")
                }

        }

        //stopwatchの表示
        SaveCodeH.text = "\(measureH)"
        SaveCodeM.text = "\(measureM)"
        SaveCodeS.text = "\(measureS)"
    }

    // Stopボタンを押した時の処理
    @IBAction func tapStop() {
        // Startボタン、Resetボタンを有効化
        buttonStart.isEnabled = true
        // Stopボタンを無効化
        buttonStop.isEnabled = false
        // タイマー処理を止める
        timer.invalidate()
        // 再度Startボタンを押した時に加算するため、これまでに計測した経過時間を保存
        _ = time
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



}

で、エラー

Binary operator '*' cannot be applied to operands of type 'UITextField?' and 'Int'

がでました。

UITextFieldの入力内容を制限すればいいのかなと考えていますが、よくわかりません。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

@objc func update() {

        // 設定された時間を保存
        var SaveH = SaveCodeH;
        var SaveM = SaveCodeM;
        var SaveS = SaveCodeS;
        let Hour = SaveH * 3600
        let Second = SaveM * 60


この辺が気になりました、

変数「SaveH」に入っているものは、TimerViewControllerクラスのインスタンス変数である「SaveCodeH」でこちらはUITexFieldかと思います。
また let Hour = SaveH * 3600何ですが、UITextFieldクラスであるSaveHInt型3600をかけたものをSecondに入れようとして、エラーが起こっているのではと思います。

なので、TextFiledに入力された値(text)を一旦Intにしなければならないかと思います。

let Hour = Int(SaveCodeH.text!)!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    String型をDouble型に変換したい

      前提・実現したいこと UITextfieldに記入された数字をDouble型に変換したいのですがうまくいきません。 助けてください。

  • 解決済

    全てのTextFieldが空の時を判別したい

    現在tableviewに複数のtextfieldがあり、全てのtextfieldが空の時は画面右上のbarbuttonitemをタップ不可にし、どれかに文字が1文字でも入るとbar

  • 解決済

    pickerViewの外に値を移す

    タイトルの通りの質問です。 下記のコードで数値2つを入力、それを演算子1つ選んで計算するツールを作っています。 import UIKit class ViewControll

  • 解決済

    タイマーアプリの作成

    前提・実現したいこと スタート、ストップ、リセットのあるストップウォッチを作りたいのです ストップのあとスタートを押した際に、続きから計測できるようにしたいです 発生している問

  • 解決済

    CustomAlertについて

    困っている事 現状のalertでは私のイメージしているものが作れなかったのでcustomAlertで一からalertを作ることにしたのですがcutotomで作ったalertのコード

  • 解決済

    xibで作成したaletで入力したものをtableViewに横一列に表示させたい。

    ViewController.swift import UIKit class ViewController: UIViewController,UIPickerViewDe

  • 解決済

    tableViewのcellについて

    swift4 import UIKit class ViewController: UIViewController,UITableViewDataSource,UITabl

  • 解決済

    割り勘アプリを作成しています。

     リセットボタンを実装したいです。 割り勘アプリを作成していて、 計算して結果を出した後に、 リセットボタンを押すと 人数と金額に入力するされた数字が 空欄の状態になるようにしたい

同じタグがついた質問を見る

  • Swift

    6501questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    3760questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    3692questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。