Junior
Hangi veri iletim yöntemlerini biliyorsun?
sobes.tech yapay zeka
AI'dan gelen yanıt
- Özellikler:
- Başlatıcı enjeksiyonu sırasında.
- Başlatmadan sonra atama.
class ViewController: UIViewController { var data: String? // Özellik aracılığıyla veri aktarımı } - Delege (Delegates):
- Olaylar hakkında bildirim ve veri aktarımı için metodlar içeren protokol.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Gönderen tarafından gelen mesaj") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Alınan veri: \(data)") } } - Kapanışlar (Closures) / Geri Çağrılar (Callbacks):
- Başka bir yerde çağrılacak fonksiyonun aktarımı.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Kapanış aracılığıyla veri") } } - NotificationCenter:
- Yayın ve abone olma mekanizması, geniş çaplı bildirimler için.
// Gönderici NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Bildirimden gelen veri"]) // Alıcı NotificationCenter.default.addObserver(self, selector: #selector(didReceiveNotification(_:)), name: NSNotification.Name("DataNotification"), object: nil) @objc func didReceiveNotification(_ notification: Notification) { if let data = notification.userInfo?["data"] as? String { print("Alınan bildirim verisi: \(data)") } } - Singleton / Paylaşılan Örnek:
- Sınıfın tek örneği, küresel erişilebilir.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Diğer örneklerin oluşturulmasını engelleme } // Kullanım DataManager.shared.sharedData = "Singleton'dan veri" print(DataManager.shared.sharedData) - Anahtar-Değer Gözlemleme (KVO):
- Nesne özelliklerindeki değişiklikleri izleme mekanizması.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Özellik `@objc dynamic` olmalı } class Observer: NSObject { var observation: NSKeyValueObservation? func startObserving(object: MyObservableObject) { observation = object.observe(\.value, options: [.new]) { observedObject, change in if let newValue = change.newValue { print("Değer değişti: \(newValue)") } } } } - Core Data / Realm / Diğer Veritabanları:
- Kalıcı depolama ve kontrolörler ile ekranlar arasında veri alışverişi için.
- Aracı (Mediator Pattern):
- Diğer nesneler arasındaki etkileşimi yöneten nesne.
- Reaktif Programlama (RxSwift, Combine) kullanarak Bağlama (Binding):
- Veri akışları veya yayıncılar aracılığıyla veri aktarımı.
// Combine örneği import Combine let publisher = PassthroughSubject<String, Never>() // Abone let subscriber = publisher.sink { receivedValue in print("Combine aracılığıyla alınan değer: \(receivedValue)") } // Gönderici publisher.send("Combine'dan veri") - Kullanıcı Tercihleri (User Defaults):
- Küçük ve basit verilerin küresel erişimi için.
UserDefaults.standard.set("Kullanıcı Adı", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - SwiftUI'de Çevresel Nesneler (Environment Objects):
- Bağımlılıkları görünüm hiyerarşisinin aşağısına iletmek için.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "İlk mesaj" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }