İOS için yeni bir tek görünüm XCode projesi oluşturarak başlayalım.
Projeyi istediğiniz gibi çağırabilirsiniz ve bu projede CoreData, Unit Tests veya UI Tests kullanmayacağız. Ayrıca SwiftUI yerine Storyboard'lar kullanacağız. Projenizi kaydetmek istediğiniz yere gidin ve sürüm kontrolünü kullanmak istiyorsanız bir Git deposu oluşturun.
Arayüzü oluşturmaya başlamadan önce, uygulamamızın kullanacağı verileri anlamamız gerekiyor.
Gönderileri almak için kullanacağımız API'ye bir bağlantı: https://jsonplaceholder.typicode.com/
Kaynakların altına bakarsanız, burada kullanacağımız '/ posts' göreceksiniz. (Bu sitede JSON verilerinin birçok başka yararlı örneği var - kullanıcıları görüntülemek için neden benzer bir şey yapmayı denemiyorsunuz?)
Gönderileri seçmek sizi şuna benzeyen JSON'a götürmelidir:
JSON, her biri aşağıdakileri içeren bir gönderi listesi içerir:
Artık hangi verileri görüntülemek istediğimizi biliyoruz, hadi arayüzle başlayalım! Main.storyboard dosyasını açın.
Başlık görünümünü oluşturarak başlayalım. Bir görünümü ekrana sürükleyin ve üste, ön ve arka kenarlara sabitleyin ve 80'lik bir yükseklik verin. Arka plan rengini istediğiniz şekilde ayarlayın, ancak pembe renk kullandım (229, 0, 56 ).
Sonra bir etiket ekleyelim. Görünüme bir etiket sürükleyin ve metni 'POSTS' olarak değiştirin. Yatay olarak ortalayın ve görünümün altından 8 sabitleyin. Yazı tipini Avenir Next Bold 24.0 ve rengi beyaz olarak ayarladım.
Harika iş! Şimdi tablo görünümüne geçelim!
Sonraki adım, gönderileri kaydırılabilir bir listede görüntülememizi sağlayacak tablo görünümünü eklemektir. Önce bir tablo görünümünü ekrana sürükleyelim. Başlık görünümünün altından sıfıra ve tüm kenarlardan sıfıra sabitleyin (alt kısmın Güvenli alana değil Süper Görünüme sabitlendiğinden emin olun). İşte amaçladığınız şey:
Ardından, nesne kitaplığından bir tablo görünümü hücresi eklememiz gerekiyor. Birini tablo görünümüne sürükleyin ve yeniden boyutlandırın, böylece tüm etiketleri eklemek için bol miktarda alanınız olur.
Sonra, bazı etiketleri sürükleyelim. Başlıkta olduğu gibi, metni ve yazı tipini değiştirebilirsiniz. Şimdilik, onları kabaca olması gereken yere konumlandırın. Bunu yakında düzelteceğiz. İşte etiketlerde kullandığım ayarlar.
Ekran farklı cihazlarda yeniden boyutlandırılırken etiketlerimizi konumlandırmanın yeni bir yolunu inceleyelim: Yığın Görünümleri!
İki kimlik etiketini yatay yığın görünümüne yerleştirin (hizalama: Merkez, dağıtım: Eşit Doldur, aralık: 0). Daha sonra bu yığın görünümünü ve diğer iki etiketi dikey bir yığın görünümüne gömün (hizalama: Doldurma, dağıtım: Orantılı Doldur, aralık: 5).
İç yığın görünümünde bir yükseklik ayarladığınızdan emin olun (yaklaşık 25 öneriyorum), böylece yığın görünümündeki diğer öğelerin ilgili olarak yeniden boyutlandırılması gereken bir şey olsun.
Dış yığın görünümünü 0 hücrenin tüm kenarlarından sabitleyin ('Kenar boşluklarıyla sınırla' açıkken). Son olarak hücrenin satır yüksekliğini otomatik olarak ayarlayın. İşte işin bittiğinde nasıl görünmesi gerektiği:
Bu proje için MVC mimarisini kullandığımız için dosyalarımız için gruplar oluşturalım. Navigator'da (solda) 'Model', 'Görünüm' ve 'Kontrolör' başlıklı bir grup oluşturun. ViewController.swift dosyasını Controller grubuna sürükleyin. Dosyayı açın ve sınıfı PostsVC olarak yeniden adlandırın (sınıf adını seçin, ctrl tuşuna basıp tıklayın ve Refactor öğesini seçin, ardından Yeniden Adlandır, yalnızca metni DEĞİŞTİRMEYİN). Bu, onu Navigator'da da güncellemelidir.
İşte nasıl görünmesi gerektiği:
Ardından, yapı kullanarak bir gönderi için model oluşturalım.
Daha önce tartıştığımız gibi, her gönderinin bir başlığı, gövdesi, kimliği ve onu yapan kullanıcının kimliği vardır.
Model grubunda Post adlı yeni bir Swift dosyası oluşturun ve aşağıdaki gibi verileri yansıtacak bir yapı oluşturun:
JSON'u dönüştürmek için bu modeli kullanacağımızdan, değişken isimlerini JSON olanlarla tam olarak eşleştirebiliriz veya kodlama anahtarları kullanabiliriz (JSON, userID'ye değil, userID'ye sahiptir). Ayrıca yapıyı Çözülebilir protokole uygun hale getirmemiz gerekiyor. İşte güncellenmiş Gönderi modeli:
Tablo görünümündeki her gönderinin değerlerini ayarlamak için, UITableViewCell'den miras alan özel bir sınıf oluşturmamız gerekir.
Navigator'daki Görünüm grubunda yeni bir dosya oluşturun. Bu sefer, bir Cocoa Touch Class dosyası oluşturun ve UITableViewCell'in bir alt sınıfı olduğundan emin olun.
SetSelected () ve awakeFromNib () işlevlerini değiştirmeyeceğimiz için silebilirsiniz.
İlk işimiz her bir etiket için IBOutlets kurmaktır. Bunu yapmak için, tablo görünümümüzde prototip hücresinin sınıfını 'PostCell' olarak ayarlamamız gerekir (Ayrıca oradayken yeniden kullanım tanımlayıcısını 'PostCell' olarak ayarlayın). Daha sonra çıkışları manuel olarak oluşturabilir veya etiketlerden ctrl tuşuna basarak PostCell.swift dosyasına sürükleyebilirsiniz.
Ardından, etiketlerin metnini gerçekten ayarlamak için bir işlev oluşturalım. Bu, her hücre oluşturulduğunda bir gönderiyi geçmemize izin verecek ve işlev bizim için görünümü ayarlayacaktır.
İşte tamamlanmış PostCell dosyası.
Harika iş! Artık tablo görünümünü ayarlamaya hazırız. İlk olarak, PostsVC'deki tablo görünümü için bir IBOutlet oluşturun.
Ardından, PostsVC sınıfının bir uzantısını oluşturun ve UITableViewDelegate ve UITableViewDataSource protokollerine uygun hale getirin. TableView veri kaynağını ayarlayın ve viewDidLoad () 'da' self '(PostsVC) olarak delege edin.
XCode, numberOfRowsInSection ve cellForRowAt işlevlerini eklemenizi gerektirecektir (ipucu: hata açıldığında, XCode'a protokol saplamalarını eklemesini söyleyin).
Sonra, biz her şeyi çalışır hale getirirken, kukla veriler içeren bir gönderi listesi oluşturalım.
Şimdi numberOfRowsInSection fonksiyonunda listenin uzunluğunu döndürebiliriz.
Ardından, listedeki her gönderi için gerçek hücreyi ayarlamamız gerekir. CellForRowAt işlevinde, bunu yapmak için tableView'in dequeueReusableCellFunction işlevini kullanın ve bunu bir PostCell olarak çevirin. Yeniden kullanım tanımlayıcısını film şeridinde daha önce ayarladık, böylece XCode hangi prototip hücresini kullanacağını bilecekti.
Dökümün başarısız olması durumunda 'guard let' kullanıyoruz, bu durumda sadece normal bir UITableViewCell döndüreceğiz.
Daha sonra iletilen dizindeki gönderideki verilerle daha önce yaptığımız işlevi kullanarak hücreyi kurabiliriz. Son işimiz hücreyi geri döndürmek.
Şimdi, uygulamayı çalıştırırsanız, sahte verilerimizi tablo görünümünde görüntülemelidir!
Bir sonraki adım, yayınları API'den gerçekten yüklemektir. Bu eğitimin başında, kullanacağımız API'ye bir göz attık. Bağlantı burada:
PostsVC'de getPosts () adında yeni bir işlev oluşturun. Görünüm yüklendiğinde, JSON verilerini API'den gerçekten almak, JSON'un kodunu Post nesnelerine çözmek ve bunları tablo görünümümüzde görüntülemek için bunu çağıracağız.
Başarısız olabileceği için guard-let kullanarak bir URL nesnesi oluşturarak başlayalım. Uyarı, URL'yi henüz kullanmamış olmamızdır.
Ardından, bir URLSession başlatalım. Sonuna .resume () eklemek önemlidir, aksi takdirde hiçbir zaman gerçekten çalıştırılmaz (ipucu: bu hatalar için ortak bir kaynaktır!).
Verileri alabilirsek, gönderileri çözmeyi deneriz. JSONDecoder bunu bizim için çok kolaylaştırıyor. Post sınıfımızı Kod Çözülebilir protokole uygun hale getirdiğimizde, kod çözücüye verinin Post nesnelerinin bir listesi olduğunu ve bizim için kodunu çözeceğini söyleyebiliriz.
Son olarak, tablo görünümünün verilerini aldığı gönderi listesini güncelleyebilir ve tablo görünümüne yeniden yüklemesini söyleyebiliriz. Burada kullanıcı arayüzünü güncellediğimizden, arka planda çalışabilmesi için ayrı bir iş parçacığı kullanıyoruz ve ardından istek tamamlandığında ana iş parçacığını güncelliyoruz.
Ardından, posts dizisini başlangıçta boş bir diziye ayarlayalım, ardından uygulamayı deneyip çalıştıralım!
Uygulama şimdi API'den gelen gönderi verilerini görüntülüyor olmalıdır! Yüklenirken veriler görüntülenmeden önce bir gecikme olduğunu fark edebilirsiniz. Şimdi bununla ilgili bir şeyler yapalım.
Uygulamamızın kullanıcı deneyimini iyileştirmek için, veriler API'den yüklenirken bir etkinlik göstergesi (dönen tekerlek) görüntüleyelim. Bu, kullanıcıların neler olduğunu bilmelerine yardımcı olacaktır.
Öncelikle, PostsVC'de bir aktivite göstergesi görünümü oluşturalım. Daha sonra konumunu belirleyebilir ve viewDidLoad'a bir alt görünüm olarak ekleyebiliriz. Ayrıca görünüm yüklendiğinde dönmeye başlamasını istiyoruz. Veriler yüklenene kadar tablo görünümünü görmemize gerek yok, öyleyse bunu gizleyelim.
Veriler alındıktan sonra, etkinlik göstergesini gizlememiz ve tablo görünümünü göstermemiz gerekir. Şimdi bunu yapalım.
Harika! Şimdi deneyelim…
Aferin! Artık bir API'den verileri alan ve bunu bir tablo görünümünde kullanıcıya görüntüleyen bir uygulama oluşturdunuz. Kişiler uygulamasındaki gibi tüm kullanıcıların listesi gibi API'den başka bir veri türü için benzer bir şey oluşturmaya ne dersiniz?
Projenin tamamını GitHub'da buradan görüntüleyebilirsiniz: https://github.com/serena7889/PostsDemo/
Bir mobil geliştirici olarak (benim gibi), bir şeyi incelemek veya profesyonel bir vitrin oluşturmak için kişisel bir proje başlattıysanız, genel bir API aramak yaygındır. Bu basit ve sıkıcı "genel API" arama görevi, yeterince iyi bir tane seçmek için çok zaman harcamamıza neden oluyor.
WWDC21'in en ilgi çekici özelliği, Xcode 13 sürüm notlarında derinlere gömüldü: macOS 12 veya iOS 15 veya sonraki bir dağıtım hedefiyle oluşturulan tüm programlar ve dylib'ler artık zincirleme düzeltmeler biçimini kullanıyor. Bu, farklı yükleme komutları ve LINKEDIT verileri kullanır ve eski işletim sistemi sürümlerinde çalışmaz veya yüklenmez.
Pragmatik Programcı ilk olarak 1999'da yayınlandı ve o zamandan beri tüm zamanların en iyi programlama kitabı seçildi. Yazarlar Andy Hunt ve David Thomas, Agile Manifesto'nun orijinal yazarları arasındaydı ve bazı ciddi referanslara sahipler.
Saldırganların herkese açık GraphQL arabiriminizi kullanarak sitenizi nasıl kazıyabileceğini veya hizmet reddi saldırıları gerçekleştirebileceğini öğrenin. Bunu dört yoldan biriyle yapabilirler: yürütmek için tek bir büyük sorguyu dikkatlice oluşturarak, ilgili verileri getirebilecek çok sayıda paralel sorgu yazarak, arka arkaya çok sayıda sorgu göndermek için toplu istekleri kullanarak ve son olarak çok sayıda istek göndererek.
Teknoloji endüstrisindeki bir pozisyon için mülakat yaparken, herhangi bir teklif değerlendirilmeden önce genellikle en az üç tur mülakattan geçeceksiniz. Mermiler genellikle şuna benzer: Eğer öyle düşünüyorsan, yanılıyorsun.
Harika geliştiriciler yapan teknik olmayan şeyler Bir süredir bu makaleyi yazmayı erteliyorum - yazmak için hiç nitelikli hissetmedim. Bugün onu yazma zamanının geldiğini düşündüm.
NCIS yıldızı Mark Harmon, 2003'ten beri Gibbs'i oynuyor. Raporlar, oyuncunun bu sezon çok fazla bölümde yer almayacağını söylüyor. İşte bildiklerimiz.
'The Hitman's Wife's Bodyguard' yönetmeni Patrick Hughes filmi çekerken o kadar çok gülüyordu ki stüdyodan çıkmak zorunda kaldı.
BTS'in şarkısı 'Butter', Billboard Hot 100'de art arda dört hafta boyunca 1 numaraya ulaştı ve grubun 'Dynamite' ile önceki rekorunu geride bıraktı.
'Sex and the City' hayranlarının küçük bir fraksiyonu, Big ile evli olmasına rağmen Aidan Shaw'ın Carrie Bradshaw'ın gerçek aşkı olduğunu düşünüyor. Seride kanıt var mı?
ABD, COVID-19 sonrası bir miktar normalliğe dönerken, şehirler, otoyolların bir kez daha tıkanmasını önlemek için taşıtları yollardan yeterince uzak tutabilir mi?
Federal İşsizlik Vergisi Yasası olan FUTA, Büyük Buhran'a yanıt olarak 1939'da kanun haline getirildi ve COVID-19 salgını sırasında keşfettiğimiz gibi, bugün hala büyük bir önemi var.
Muhtemelen "Dolandırıcılık Olasılığı" veya "Sahtekarlık Uyarısı" tomurcuklarınızdan gelen aramaları görmüşsünüzdür. Peki, operatörünüze bu arayanların yasal olmadığını gösteren hediye nedir?
Gerçek şu ki, bu mega sellerden birini vurma şansınız her yıl aynıdır: yüzde 1.
Şanssız olanlar kimler? Ne zaman bir takım başarısız olursa, adı geçen takımın taraftarları şansa katkıda bulunan bir faktör olarak işaret edecektir. "İlk tur seçimimiz başarılı olsaydı, harika olurduk!" "Bunlardan birkaçını daha kazansaydık yakın oyunlar, playofflarda olurduk.
Steve Yzerman, Detroit'e gitmeden önce Tampa Bay'i yeniden inşa etti. NHL playoffları sağlam, eğlenceli, rekabetçi, zorlu ve entrikalarla dolu.
Brittney Griner ve Diana Taurasi tekrar altını hedef alıyor. Dün, Team USA kadın basketbol takımı, gelecek ay Tokyo'daki Olimpiyat Oyunları için tam 12'sini açıkladı ve henüz kesinleşmemiş olan erkek kadrosu şekilleniyor.
NEW YORK—Sahte bir hayal kırıklığıyla dilini şakırdatan Bill De Blasio, New Yorklulara "Her şeye rağmen bok gibi olmayan bir belediye başkanı bulmak o kadar kolay değil, ha?" dedi. Salı günü düzenlediği basın toplantısında. "Hey, hepiniz elinizden gelenin en iyisini yaptınız, ancak ulusal bir rezalet olmayacak bir adayı yönetmek düşündüğünüzden biraz daha zor görünüyor, değil mi?" dedi De Blasio, oy veren halkın şehrin geneli için sürekli bir utanç kaynağı olmaktan çok daha fazlasını oluşturacak birini seçme ihtimali karşısında belki de biraz fazla büyüdüğünü öne sürerken sırıtarak.
Sporcular imza stillerini Eugene, Oregon'daki ABD Olimpiyat atletizm ve saha denemelerine getirdiler
Gönderi, Kacey Musgraves ve yazar Cole Schafer'in New York City'de birlikte yürürken görüntülenmesinden sadece birkaç gün sonra geldi.
Robert Sanchez olayda bir kolu kırıldı, ancak ağabeyi Neithan Morales sayesinde daha kötü bir şey olmadı.
Khloé Kardashian, Keeping Up with the Kardashians'ın Pazar günkü özel toplantısının ikinci bölümünde kardeşi Rob Kardashian hakkında konuştu.