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

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

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Swift

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

Q&A

1回答

1025閲覧

与えられた文字列からリピートするローカル通知の受け取りタイミングを設定したい

pftyuk

総合スコア52

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Swift

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

0グッド

0クリップ

投稿2018/12/25 14:54

編集2018/12/27 15:25

前提・実現したいこと

以下のフォーマットの与えられた文字列を元に
リピートするローカル通知を受け取るタイミングを設定したいです

与えられた文字列の曜日に該当する当日及び前日にリピートする通知を設定したいです

与えられる文字列のフォーマットは次の2パターンを想定しております
パターン1 "◯曜日"   (◯には月・火・水・木・金・土・日のどれかが入る)
パターン2 "第□◯曜日"  (◯は上記と同様、□には1・2・3・4・5のどれかが入る)

例:
"月曜日" → 毎週の当日の月曜日と前日の日曜日に通知を飛ばす
"木曜日" → 毎週の当日の木曜日と前日の水曜日に通知を飛ばす
"第1木曜日" → 毎月の当日の第1木曜日と???(ここの求め方がわかりませんでした)

"第1木曜日"の入力に対して、必ずしも第1水曜日が前日ではないため
"第□◯曜日"のフォーマットで入力されたときの、前日の算出方法が知りたいです

正規表現を用いて、パターン1・2の文字列が与えられたときに
パターン1については◯部分をInt型で抽出
パターン2については□と◯部分をInt型で抽出するところまではできております

手詰まりなため、ご教示頂けると幸いです。

該当のソースコード

Swift

1var notificationTime = DateComponents() 2notificationTime.hour = 12 3notificationTime.minute = 0 4/* 5通知を受け取る日を決める 6 7//月曜日 8let str = "月曜日" 9notificationTime.weekday = 2 10 11//水曜日 12let str = "水曜日" 13notificationTime.weekday = 4 14 15//第1木曜日 16let str = "第1木曜日" 17notificationTime.weekday = 5 18weekdayOrdinal = 1 19 20*/ 21 22let trigger = UNCalendarNotificationTrigger(dateMatching: notificationTime, repeats: true) 23let content = getContent() 24let request = UNNotificationRequest(identifier: "Notification_(counter)", content: content, trigger: trigger) 25UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

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

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

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

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

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

guest

回答1

0

第一木曜日の年月日までは求まっているのでしょうか?

であれば、そこからカレンダーの関数を使って1日前の日付を取ればOKです。

swiftで前日の日付を取得する方法を教えてください
https://teratail.com/questions/22075

(let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date())的な)

投稿2018/12/26 00:37

takabosoft

総合スコア8356

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

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

pftyuk

2018/12/26 11:53

ご回答頂きありがとうございます。 最初に、ご提示頂いた年月日を求めて通知の受け取るタイミングを決めていたのですが その方法だと"与えられた文字列の曜日に該当する当日及び前日にリピートする通知を設定したい"の リピートの部分が実現出来なかったので、実装方法を模索している次第です。 年月日まで指定してしまうと、毎月の第一木曜日に通知を受け取ることは出来ないですよね? weekdayOrdinalが1(第一)でweekdayが5(木曜日)のDatecomponentを指定すれば 毎月第一木曜日に通知が受け取れるかと思いますが、その前日が算出出来なくて困ってしまいました。
takabosoft

2018/12/27 00:19

その情報は質問欄に提示すべきでしたね。すみませんがローカル通知のリピートの仕組みは存じ上げません。「第一木曜日の前日」が指定できない仕様であれば、例えば直近から登録できる限り「第一木曜日の前日」を列挙して登録しておけばいいのではと思いました(ググった感じでは64個でしょうか)。アプリの起動の度に再設定しなおす必要はありそうです。
pftyuk

2018/12/27 14:59

返信頂きありがとうございます。 仰る通りリピートの部分は明示して書く必要がありました・・・。 情報足らずで手間をかけさせてしまい失礼致しました。 列挙して登録する方法は一つの実装方法として参考にさせて頂きます! ご回答頂きありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問