Swift Academy · Ders

İsteğe Bağlı ve İç İçe Türleri İşleme

İsteğe bağlı değerlerin ve iç içe yapıların kodunu güvenle çözün.

4. ders / 413 adım

İsteğe Bağlı ve İç İçe Türleri İşleme, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

İsteğe Bağlı Özellikler

İsteğe bağlı bir özellik, içerdiği tür Codable olduğunda doğal olarak Codable'dır. Eksik bir JSON anahtarı nil olarak çözülür; mevcut bir anahtarın kodu normal biçimde çözülür.

import Foundation

struct User: Codable {
    var name: String
    var nickname: String?
}

let json = "{\"name\":\"Ada\"}"
let u = try JSONDecoder().decode(User.self, from: json.data(using: .utf8)!)
print(u.name, u.nickname ?? "-")

nil Olan İsteğe Bağlı Değerleri Kodlama

Varsayılan olarak nil olan isteğe bağlı bir değer, kodlanan JSON'dan tamamen çıkarılır ve daha küçük bir yük üretilir.

import Foundation

struct User: Codable {
    var name: String
    var nickname: String?
}

let data = try JSONEncoder().encode(User(name: "Ada", nickname: nil))
print(String(data: data, encoding: .utf8)!)

Açık null, nil Olarak Çözülür

JSON, isteğe bağlı bir özellik için açıkça null içeriyorsa bu değer hata fırlatmak yerine nil olarak çözülür.

import Foundation

struct User: Codable {
    var name: String
    var age: Int?
}

let json = "{\"name\":\"Ada\",\"age\":null}"
let u = try JSONDecoder().decode(User.self, from: json.data(using: .utf8)!)
print(u.age == nil)

İç İçe Codable Yapıları

Codable türleri iç içe yerleştirerek modelleri birleştirin. Dış tür, içteki türü otomatik olarak kodlar ve kodunu çözer.

import Foundation

struct Address: Codable { var city: String; var zip: String }
struct Person: Codable { var name: String; var address: Address }

let p = Person(name: "Lee", address: Address(city: "Rome", zip: "00100"))
let data = try JSONEncoder().encode(p)
print(String(data: data, encoding: .utf8)!)

İç İçe Yapıların Kodunu Çözme

Tersi de geçerlidir: İç içe JSON nesnelerinin kodu, iç içe yapı özelliklerine çözülür.

import Foundation

struct Address: Codable { var city: String }
struct Person: Codable { var name: String; var address: Address }

let json = "{\"name\":\"Lee\",\"address\":{\"city\":\"Rome\"}}"
let p = try JSONDecoder().decode(Person.self, from: json.data(using: .utf8)!)
print(p.address.city)

İsteğe Bağlı İç İçe Türler

İç içe bir yapı kendi başına isteğe bağlı olabilir. Anahtar yoksa iç içe değerin tamamı nil olur.

import Foundation

struct Address: Codable { var city: String }
struct Person: Codable { var name: String; var address: Address? }

let json = "{\"name\":\"Lee\"}"
let p = try JSONDecoder().decode(Person.self, from: json.data(using: .utf8)!)
print(p.address?.city ?? "no address")

Codable Dizileri

Codable öğe türünden oluşan bir dizi, kendisi de Codable'dır. Doğrudan nesnelerden oluşan bir JSON dizisine eşlenir.

import Foundation

struct Tag: Codable { var name: String }
struct Post: Codable { var title: String; var tags: [Tag] }

let p = Post(title: "Hi", tags: [Tag(name: "swift"), Tag(name: "json")])
let data = try JSONEncoder().encode(p)
print(String(data: data, encoding: .utf8)!)

Yapı Dizilerinin Kodunu Çözme

Nesnelerden oluşan bir JSON dizisinin kodunu çözmek, üzerinde yineleme yapabileceğiniz, türü belirlenmiş değerlerden oluşan bir Swift dizisi verir.

import Foundation

struct Tag: Codable { var name: String }

let json = "[{\"name\":\"a\"},{\"name\":\"b\"}]"
let tags = try JSONDecoder().decode([Tag].self, from: json.data(using: .utf8)!)
for t in tags { print(t.name) }

İsteğe Bağlı Diziler

İsteğe bağlı bir dizi, "anahtar yok" (nil) durumunu "anahtar var ancak dizi boş" ([]) durumundan ayırır. Her ikisi de geçerli ve anlamlı durumlardır.

import Foundation

struct Box: Codable { var items: [String]? }

let a = try JSONDecoder().decode(Box.self, from: "{}".data(using: .utf8)!)
let b = try JSONDecoder().decode(Box.self, from: "{\"items\":[]}".data(using: .utf8)!)
print(a.items == nil, b.items == [])

Derin İç İçe Yapılar

İç içe yerleştirme birkaç düzey derinleşebilir: yapıların içindeki dizilerin içindeki yapılar gibi. Codable her katmanı özyinelemeli olarak ele alır.

import Foundation

struct Comment: Codable { var text: String }
struct Article: Codable { var title: String; var comments: [Comment] }
struct Feed: Codable { var articles: [Article] }

let feed = Feed(articles: [Article(title: "A", comments: [Comment(text: "hi")])])
let data = try JSONEncoder().encode(feed)
print(String(data: data, encoding: .utf8)!)

İsteğe Bağlı Değerler ve İç İçe Yapılarla Gidiş-Dönüş

Her şeyi birleştirdiğinizde isteğe bağlı alanlar, iç içe yapılar ve diziler tam bir kodlama-kod çözme gidiş-dönüşünden değişmeden geçer.

import Foundation

struct Address: Codable { var city: String }
struct Person: Codable {
    var name: String
    var address: Address?
    var hobbies: [String]
}

let p = Person(name: "Mo", address: Address(city: "Cairo"), hobbies: ["chess"])
let data = try JSONEncoder().encode(p)
let back = try JSONDecoder().decode(Person.self, from: data)
print(back.address?.city ?? "-", back.hobbies.first ?? "-")

Hızlı Kontrol: İsteğe Bağlı ve İç İçe Türler

İsteğe bağlı ve iç içe Codable türleri hakkındaki anlayışınızı sınayın.

Özet: İsteğe Bağlı ve İç İçe Türler

Codable'ın daha karmaşık veri şekillerini nasıl ele aldığını öğrendiniz:

  • İsteğe bağlı özellikler eksik anahtarlara ve açıkça belirtilen null değerlerine tolerans gösterir; bunların kodu nil olarak çözülür.
  • nil olan isteğe bağlı değerler, varsayılan olarak kodlama sırasında çıkarılır.
  • İç içe Codable yapılar ve diziler özyinelemeli olarak kodlanır ve kodları çözülür.
  • İsteğe bağlı diziler, eksik (nil) durumu boş ([]) durumundan ayırır.
Başlamak ücretsiz

Yapay zeka eğitmeniyle Swift öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
122
Dersler
409

Sıkça Sorulan Sorular

“İsteğe Bağlı ve İç İçe Türleri İşleme” dersi ücretsiz mi?

Evet — “İsteğe Bağlı ve İç İçe Türleri İşleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“İsteğe Bağlı ve İç İçe Türleri İşleme” dersinde ne öğreneceğim?

İsteğe bağlı değerlerin ve iç içe yapıların kodunu güvenle çözün. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“İsteğe Bağlı ve İç İçe Türleri İşleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Codable'a Uyum Sağlama
  2. JSONEncoder ile Kodlama
  3. JSONDecoder ile Kod Çözme
  4. İsteğe Bağlı ve İç İçe Türleri İşleme
← Swift Academy Sayfasına Dön