์๋ ํ์ธ์~
์ค๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋จํ ์๊ฐํ๊ณ ์ ๋ฐ์ดํธํ ๋ด์ญ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค : )
[ ์ผ๋จ ๋งํฌ๋ถํฐ โฌ ]
์๊ฐ
์ฌ๋๋ง๋ค "ํน์ ํ ๋จ์ด์์ ๋๋ผ๋ ๊ฐ์ , ์๊ฐ ๋ชจ๋ ๋ค๋ฅด์ง ์์๊น?" ํ๋ ์๊ฐ์์ ์์ํ์ต๋๋ค.
์ผ์ ์์์ ๋ ์ค๋ฅด๋ ๋จ์ด๋ฅผ ์ ์ํ๊ณ , ๊ฐ์ ์ ๊ธฐ๋กํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
์ ๋ฐ์ดํธ
์ฒ์ ๋ก์ปฌ ์๋ฆผ์ ๊ตฌํํ์ ๋๋ ์ ์์ ์ผ๋ก ์๋ํ๋ค๊ณ ์๊ฐํ์์ต๋๋ค.
๋ฐฐํฌ๊น์ง ์ ๋ง๋ฌด๋ฆฌ๋ ์ํฉ์ด์๋๋ฐ ์ด์ํ๊ฒ๋ ๊ฐ์ ์๋ฆผ์ด ๊ณ์ ์ค๊ณ ์์์ต๋๋ค.
๊ทธ๋์ ํด๋น ๋ถ๋ถ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๊ณ
์ ๋ฐ์ดํธ๋ฅผ ์งํํ๊ฒ ๋์์ต๋๋ค.
์ ์ฉ ๋ฐฉ๋ฒ
func setNoti() {
//๊ธฐ์กด์ ์ฒ๋ฆฌ๋์ง ๋ชปํ๋ Notification์ ์ ๊ฑฐ
userNotiCenter.removeAllPendingNotificationRequests()
// ์๋ฆผ์ค์ ์ ์ธ๋์ผ์ดํฐ ํ์๋ฅผ ์ํจ!
indicator.isHidden = false
DispatchQueue.main.async {
// ์๋ฆผ ์ค์ ์, ๋น์ผ์ ๊ธฐ์ค์ผ๋ก ๋ค์๋ ๋ถํฐ ์ ์ฉ ( ๋งค๊ฐ๋ณ์๋ก ๋น์ผ Date๋ฅผ ๋ฐ์ )
// + ๊ธฐ์กด์ ์ ์ฅ๋์ด์๋ ๋ฐ์ดํฐ(shuffled๋ ๋ฐฐ์ด) ๋ชจ๋ ์ ๊ฑฐ
randomWords.wordList.shuffleWords(date: Date())
// ์๊น ๋ง์๋๋ฆฐ 800์ฌ๊ฐ์ ์๋ฆผ ๋ฑ๋ก...
self.registerContent {
// ์ธ๋์ผ์ดํฐ ํ๋
self.indicator.isHidden = true
}
}
}
- ๊ธฐ์กด์ ์ฒ๋ฆฌ๋์ง ๋ชปํ ์๋ฆผ ๋ค์ ์ ๊ฑฐํ๊ณ ๋๋คํ ๋จ์ด ๋ฐฐ์ด์ Notification์ Content์ ๋ฃ์ด์คฌ์ต๋๋ค. ์ด๋, ์๋ฆผ์ ์ค์ ํ ๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก 64๊ฐ์ ๋จ์ด๋ฅผ ์ ์ฅํ์ต๋๋ค. ( ๋ก์ปฌ ์๋ฆผ์ ๊ฒฝ์ฐ, ์ต๋ 64๊ฐ๋ก ์ ํ๋์ด ์๋ค๊ณ ํฉ๋๋ค )
// Realm์ ์ด์ฉํด ์ ์ฅํด ๋๋ ๋จ์ด์์ ํด๋น ๋ ์ง์ ๋จ์ด๋ฅผ ๋ฐํ
func randomWordGenerate(date: Date) -> String {
let format = DateFormatter()
format.dateFormat = "yyyy๋
MM์ dd์ผ"
let value = format.string(from: date)
let tasks = localRealm.objects(NotiWordModel.self).filter("date == %@",value)
return tasks[0].word
}
- ์์ ์ค๋ช ํ 64๊ฐ์ ๋จ์ด๋ฅผ Realm์ ์ ์ฅํด ์ฌ์ฉํ์ต๋๋ค. ์์ ์ฝ๋๋ ํด๋น ๋ ์ง์ ๋จ์ด๋ฅผ ๊ฐ์ง๊ณ ์ ๋ฐํํด ์ฃผ๋ ๋ฉ์๋์ ๋๋ค.
func registerContent(onCompletion: @escaping () -> Void) {
var pickedDate = notiTimePicker.date
// ๋ฐ๋ณต๋ฌธ
for item in 0..< 64 {
// ํ๋ฃจ์ฉ ์ถ๊ฐํด์ฃผ๊ธฐ
let newDate = Calendar.current.date(byAdding: .day, value: item, to: date)
// ํด๋น ๋ ์ง์ ๋จ์ด ๊ฐ์ง๊ณ ์ค๊ธฐ
let word = randomWords.wordList.randomWordGenerate(date: newDate!)
// ์ค์ ์๋ฆผ์ ๋ณด๊ฒ ๋ ๋ด์ฉ๋ค์
๋๋ค!
let content = UNMutableNotificationContent()
content.title = "์ค๋๋ ํฐ๋์ ํจ๊ป ํด์๐๐ปโ๏ธ"
content.body = "์ค๋์ ์ถ์ฒ ๋จ์ด๋ [ \(word) ]์
๋๋คโ๏ธ\n\(word)์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์๋์? ์์ฑํ๋ฌ ๊ฐ์๐"
content.sound = .default
// ๋ฐ๋ณต์ ๋น์ฐํ false๋ก ์ฒ๋ฆฌํด์ค์ผ๊ฒ ์ฃ !
let trigger = UNCalendarNotificationTrigger(
dateMatching: Calendar.current.dateComponents([.month,.day,.hour, .minute], from: pickDate), repeats: false)
// ํ๋ฃจ๋ฅผ ์ถ๊ฐํด์ฃผ๋ ๊ฑฐ์์! ์ง๊ธ๋ณด๋๊น ์ฝ๋ ์๋ณ๋ก๋ค..
pickDate.addTimeInterval(86400)
let request = UNNotificationRequest(identifier: content.body, content: content, trigger: trigger)
// ๋ฑ๋กํด๋ณด์ฃ !
self.userNotiCenter.add(request) { error in
guard error != nil else {
return
}
DispatchQueue.main.async {
self.showToast(message: "๋ค์ ์๋ํด์ฃผ์ธ์!")
}
}
}
}
- ์์ ๊ฐ์ด 64๊ฐ์ ์๋ฆผ์ ๋ฑ๋กํ์ต๋๋ค.
์ฃผ๋จน๊ตฌ๊ตฌ ์์ผ๋ก ๋ง๋ฌด๋ฆฌ๊ฐ ๋์ด ์์ฝ๊ธด ํ์ง๋ง ๊ธฐ์กด MVC์์ MVVM์ผ๋ก ๋ณ๊ฒฝํ ๋ ํจ๊ป ๋ฆฌํฉํ ๋ง ํด์ผ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ผ ์ด๋ง ๐๐ป ๐๐ป ๐๐ป
'ํ๋ก์ ํธ > Today I Define' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Swift ] Localization ์ ์ฉ ๋ฐ ๋ฐฉ๋ฒ(feat.Today I Define) (1) | 2022.09.26 |
---|---|
[Today I Define] NavigationBar๋ฅผ ๋ฎ์ง ๋ชปํ๋ ์ด์ (0) | 2022.05.15 |