Bu meydan okumada kendi başımıza sıfırdan eksiksiz bir uygulama oluşturacağız.
Bu kez hedefimiz, belirli şeyleri ne kadar yaptıklarını takip etmek isteyen kişiler için bir alışkanlık takip (Habit Tracker) uygulaması oluşturmak.
Bu en azından, takip etmek istedikleri tüm activity’lerin (faaliyetlerin) bir listesinin ve yeni activity’ler eklemek için bir formun olması gerekitği anlamına gelir. (Bir başlık ve bir açıklama yeterli olacaktır.)
Daha büyük bir zorluk için, activity’lerden birine dokunduğunuzda açıklamanın yer aldığı bir ayrıntı ekranı görüntülenmelidir. Zorlu bu görev için aşağıdaki ipuçlarına bakın. Ayrıca bu ayrıntı ekranında kaç kez tamamladıklarının yanı sıra tamamlanma sayılarını artıran bir buton bulunsun.
Ve uygulamayı gerçekten kullanışlı hale getirmek istiyorsanız, tüm verilerinizi yüklemek ve kaydetmek için Codable ve UserDefaults kullanın.
Yani, bu uygulamanın üç seviyesi var ve ne kadar zamanınız olduğuna ve kendinizi ne kadar zorlamak istediğinize bağlı olarak ne kadar ileri gitmek istediğinizi seçebilirsiniz. Yine de en azından her seviyeyi denemenizi tavsiye ederim.
GitHub - GorkemGuray/HabitCycle: 100 Days of SwiftUI - Milestone Day 47
İpuçları #
- Verileriniz ile başlayın: tek bir activity tutan bir struct ve array olarak activity’leri tutan bir sınıf tanımlayın
- SwiftUI’nin verilerinizi değişikliklere karşı izleyebilmesi için sınıfın
@Observablemakrosunu kullanması gerekecektir. - Ana listeniz ve formunuzun her ikisi de paylaşılan activity nesnesini okuyabilmelidir.
- Sorunlardan kaçınmak için activity’nizin
Identifiable‘a uygun olduğundan emin olun. sheet()kullanarak ekleme formunuzu veNavigationLinkkullanarak activity detay view’ı present edin.
Tamamlanma sayısını arttırmak için buton yapmak sizi zorlayacaktır, çünkü aktarılan activity’i değiştirmeniz gerekir. Eğer takılırsanız, en kolay yaklaşım şudur;
- Struct’ın
Equatableile uyumlu olmasını sağlayın. Burada özel bir şeye ihtiyacınız yok sadeceCodableveIdentifiable‘dan sonra Equatable’ı ekleyin. - Hem seçilen activity’i hem de
@Observablesınıfını ayrıntı view’a geçirin. - Arttır butonuna dokunulduğunda, mevcut activity kopyalayın ve tamamlanma sayısına 1 ekleyin.
- Sınıfın array’inde önceki activity’nin nerede olduğunu bulmak için
firstIndex(of:)kullanın, ardından bunu yeni activity olarak değiştirin. (data.activities[index]=newActivitygibi bir şey işe yarayacaktır. Bu, 1. adımdakiEquatableuygunluğunu gerektirir.)
Bu yazıyı İngilizce olarak da okuyabilirsiniz.
You can also read this article in English.