Xcodeで秒刻みのストップウォッチを作成したのでメモ書きです。
シンプルかと思ったら結構大変でした。
「こうかな?」と思って試したのがうまく行くと本当に気持ちいいですね。
この経験をもとにいろいろ作っていきたいです。
できあがり
実際に実行した画面→画面収録 2022-05-03 12.37.02
学習しながらの作成期間:約1週間ぐらい
コード
//
// ViewController.swift
// myStopwatch2
//
// Created by Matsuki on 2022/05/01.
//
import UIKit
import Foundation
class ViewController: UIViewController {
@IBOutlet weak var countLabel: UILabel!
//変数timerにオーバークラスTimerのインスタンスを入れる
//インスタンス生成により、取扱説明書でなく実利用可能なデータとする
var timer:Optional = Timer()
var x:Int = 0
var second:Int = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func startButton(_ sender: Any) {
/* ①「Timer.scheduledTimerが働いていた場合は、ボタンを押してもTimer.scheduledTimerは作動しない」という機能を追加したい!
┗これは「条件分岐」を使えばいいのかもしれない
┗試行成功
②第二の問題:「一度変数timerにクラスメソッドを入れた場合、変数timerを非有効にした際に
timerの内部を取り除けず、再度actionした際、クラスメソッドが稼働しない」
┗非有効時に変数timer内を空にすればいいのでは?
┗「timer = nil」追加
┗ 試行成功
*/
if timer == nil {
timer = Timer.scheduledTimer(timeInterval:1, target:self, selector: #selector(self.Addnumber), userInfo: nil, repeats: true)
}else{
return
}
}
@IBAction func endButton(_ sender: Any) {
//変数timerのメソッド
timer?.invalidate()
timer = nil
//カウントダウン数自体を0に置き換える
x = 0
//ラベルの初期表示を最初に戻
countLabel.text = String("00:00")
}
@objc func Addnumber(){
x += 1
/*こいつら使ってない・・・
var seconds = Int(x) % 60
var minutes = Int(x / 60 % 60)
*/
countLabel.text = String(format:"%02d:%02d",Int(x / 60 % 60), Int(x) % 60)
}
}
/*
このアプリ作成に詰め込まれた技術
・算術演算子%を使った簡単な計算機構
・Timerクラスとそのクラスメソッド.scheduledTimer
・formatを用いた桁数表示
このアプリ作成で身についたもの
・算術演算子「%」の少しだけ実践的な使い方
・計算などでわからないことがあったらオンラインスウィフトを使ってみると意外と気づくことがあること
悩んだ問題
✔︎加算された変数をどうやって、一般的なストップウォッチタイマーのような画面に変換するか
┗formatの使用
✔︎format使用で、計算された数字が表示されない
┗変数を用いず、xをそのまま代入したら解決
*/
開発環境
Bigsur 11.6.5
Xcode13.1