ミニッツリピーターとはなにか
超スーパー高額腕時計に搭載されている機能である(元々は懐中時計に搭載されていた歴史がある)。
内部に仕込まれたゴングの音の回数で現在時刻を知らせてくれる。
(1)時単位の数(アワー):低音の単音で、1回=1時から12回=12時。
(2)60分を15分単位に分割した数(クォーター):高音と低音を交互に組み合わせて鳴らし、高音→低音の1セット=15分、2セット繰り返し=30分、3セット繰り返し=45分。
(3)15分に満たない残り分数(ミニッツ):高音の単音で、1回=1分から14回=14分まで。
ストライク音の回数が最も多くなり、よくデモンストレーションにも使われる12時59分の例ではこうなる。
●まず低音が12回鳴って12時。
●続いて59分を15分単位で割ると(15分×3回)+14分だから、高音と低音との組み合わせによるクォーターを3セット打って45分。
●最後に残った14分を高音で14回打つ。
これを実装していく。
アルゴリズムを組む
ボタンを押したら発動する想定。
時間を数値で取得する方法は前回の記事で書いた。
  @IBAction func actionButton(_ sender: UIButton) {
    
    // 時間を数値で取得する
    let now = Date()
    let time = Calendar.current.dateComponents([.hour, .minute], from: now)
    // 時単位の数
    var hour = time.hour!
    // 24時間で取得するため、13時以降の場合は -12 する
    if hour > 12 {
      hour -= 12
    }
    
    // 60分を15分単位に分割した数
    let quarter = time.minute! / 15
    // 15分に満たない残り分数
    let minute = time.minute! % 15
    
    // whileで使うための変数
    var hourCount = 0
    var quarterCount = 0
    var minuteCount = 0
    // 第一ゴング
    while hourCount < hour {
      print("dong")
      hourCount += 1
    }
    
    // 第二ゴング
    while quarterCount < quarter {
      print("ding-dong")
      quarterCount += 1
    }
    
    // 第三ゴング
    while minuteCount < minute {
      print("ding")
      minuteCount += 1
    }
  }
どんくさいアルゴリズムかもしれないです。
次回は print をサウンドの再生に換装していきます。