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

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

新規登録して質問してみよう
ただいま回答率
85.35%
iOS

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

Xcode

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

Swift

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

Q&A

1回答

1007閲覧

音声ファイルの再生 時間指定

atusi828

総合スコア7

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2021/02/01 14:28

編集2021/02/02 01:34

特定の時間になるとタイマーを鳴らしたいです。その手段としてcalendar型を使用したいのですが,エラー表示が出てうまくできません。具体的にエラーの部分は、以下の3つです。

エラー1
calendar.timeZone = .current
//エラー
Consecutive declarations on a line must be separated by ';'

Expected '(' in argument list of function declaration

Expected '{' in body of function declaration

Expected 'func' keyword in instance method declaration

Expected declaration

Invalid redeclaration of 'calendar()'

エラー2
let condition1 = calendar.date(from: DateComponents(year: 2021, month: 2, day: 11, hour: 9, minute: 00, second: 00))!
//エラー
Cannot use instance member 'calendar' within property initializer; property initializers run before 'self' is available

エラー3
//
if now > codition1
//エラー
Expected declaration
//

//ソースコード
import UIKit
import AVFoundation

class ViewController: UIViewController {

var audioPlayer: AVAudioPlayer! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } // 現在の日付を得る let now = Date() // タイマー起動時間を設定する var calendar = Calendar(identifier: .gregorian) calendar.timeZone = .current calendar.locale = .current let condition1 = calendar.date(from: DateComponents(year: 2021, month: 2, day: 11, hour: 9, minute: 00, second: 00))! if now > codition1 { playSound(name: "onsei") }

}

extension ViewController: AVAudioPlayerDelegate {
func playSound(name: String) {
guard let path = Bundle.main.path(forResource: name, ofType: "m4a") else {
print("音源ファイルが見つかりません")
return
}
do {
// AVAudioPlayerのインスタンス化
audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path))
// AVAudioPlayerのデリゲートをセット
audioPlayer.delegate = self
// 音声の再生
audioPlayer.play()
} catch {
}
}
}

swift

1 2コード 3```import UIKit 4import AVFoundation 5 6class ViewController: UIViewController { 7 8 var audioPlayer: AVAudioPlayer! 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 // Do any additional setup after loading the view. 13 } 14 15 // 現在の日付を得る 16 let now = Date() 17 // タイマー起動時間を設定する 18 var calendar = Calendar(identifier: .gregorian) 19 calendar.timeZone = .current 20 calendar.locale = .current 21 let condition1 = calendar.date(from: DateComponents(year: 2021, month: 2, day: 11, hour: 9, minute: 00, second: 00))! 22 23 if now > codition1 { 24 playSound(name: "onsei") 25 } 26 27 28 29} 30 31extension ViewController: AVAudioPlayerDelegate { 32 func playSound(name: String) { 33 guard let path = Bundle.main.path(forResource: name, ofType: "m4a") else { 34 print("音源ファイルが見つかりません") 35 return 36 } 37 do { 38 // AVAudioPlayerのインスタンス化 39 audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path)) 40 // AVAudioPlayerのデリゲートをセット 41 audioPlayer.delegate = self 42 // 音声の再生 43 audioPlayer.play() 44 } catch { 45 } 46 } 47}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/02/01 23:20

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

エラーの主たる原因は、メソッド(関数)として宣言すべき内容を、クラスの宣言直下にそのまま記述したことに起因しています。

Swift

1 // 現在の日付を得る 2 let now = Date() 3 // タイマー起動時間を設定する 4 var calendar = Calendar(identifier: .gregorian) 5 calendar.timeZone = .current 6 calendar.locale = .current 7 let condition1 = calendar.date(from: DateComponents(year: 2021, month: 2, day: 11, hour: 9, minute: 00, second: 00))! 8 9 if now > codition1 { 10 playSound(name: "onsei") 11 }

これらの記述はメソッドとしてまとめ、どこか適切なタイミングで呼び出すような構造にする必要がありますので、その辺りをご検討ください(メソッドとして整理しても、上記のコードが意図した通りに動く保証はありません)。

ちなみに、 y_waiwaiさんがコメントに付けられているように、コードは適切に整形して表示していただかないと非常に読みにくいので、そのあたりもご協力お願いいたします。

投稿2021/02/02 08:59

TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問