Sobes.tech
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)  
        }  
    }