Sobes.tech

iOS

Projede kullandığın faydalı Property Wrapper'lar hakkında anlat

Senior
Salmon
26

Son projen hakkında daha detaylı bilgi ver — Avito'daki fotoğraf galerisi modülü, sorumlu olduğun (kısa süreli kiralama, rezervasyon formu vb.)

Senior
Salmon
26

Kendiniz -> Görev -> (güçlü) Kendiniz .... Geri -> View desinit -> View model deinit?

Senior
Salmon
25

Neden önbellek depolaması olarak sözlük seçtiniz?

Middle+
RevolutRevolut
25

son final Cache<T>: CacheProtocol { func getValue(forKey key: String) -> T? { return storage[key] } func fetchValue(forKey key: String, completion: @escaping (T?) -> Void) { let value = storage[key] completion(value) } } son final CacheTests: XCTestCase { override func setUp() { super.setUp() } func testSetAndGetValue() { let cache = Cache<String>() let key: String = "key" let value: String = "value" cache.setValue(value, forKey: key) XCTAssertEqual(cache.getValue(forKey: key), value) cache.setValue(nil, forKey: key) XCTAssertTrue(cache.getValue(forKey: key) == nil) } func testCompletion() { } } CacheTests.defaultTestSuite.run()

Middle+
RevolutRevolut
25

Swift'te yapılandırılmış eşzamanlılık terimini nasıl anlıyorsun? Task.detached bu kavrama uyuyor mu?

Senior
Salmon
24

import UIKit protocol CacheProtocol { associatedtype Value func setValue(_ value: Value?, forKey key: String) func getValue(forKey key: String) -> Value? func fetchValue(forKey key: String, completion: @escaping (Value?) -> Void) } final class Cache<T>: CacheProtocol { private var storage: [String: T] = [:] private let queue = DispatchQueue(label: "my.queue", attributes: .concurrent) func setValue(_ value: T?, forKey key: String) { queue.sync(flags: .barrier) { storage[key] = value } } func getValue(forKey key: String) -> T? { queue.sync { return storage[key] } } func fetchValue(forKey key: String, completion: @escaping (T?) -> Void) { queue.async { let value = self.storage[key] completion(value) } } }

Middle+
RevolutRevolut
24

Neden ayrı load ve getLastCities metodları oluşturdunuz ve veriler yüklenmeden önce getLastCities çağrılırsa ne olmalı?

Senior
Uzum
23

Yapay zeka araçları (Cursor, Proxyman vb.) işte daha verimli olmanıza ne kadar yardımcı oluyor?

Senior
Salmon
23

import UIKit protokol CacheProtocol { associatedtype Value func setValue(_ value: Value?, forKey key: String) func value(forKey key: String) -> Value? func fetchValue(forKey key: String, completion: @escaping (Value?) -> Void) }

Middle+
RevolutRevolut
23

Bellekteki önbellek ile diske kaydedilen önbellek arasındaki farkı açıklayın.

Middle+
RevolutRevolut
22

// `data`'yı `file` adlı dosyaya yazar. func writeData(_ data: Data, to file: String) { let documentDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let fileURL = documentDirectoryURL.appendingPathComponent(file) try? data.write(to: fileURL) } // `file` adlı dosyayı siler. func remove(file: String) { let documentDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let fileURL = documentDirectoryURL.appendingPathComponent(file) try? FileManager.default.removeItem(at: fileURL) } // `file` adlı dosyadan `Data` okur. Dosya yoksa `nil` döner. func readData(from file: String) -> Data? { let documentDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let fileURL = documentDirectoryURL.appendingPathComponent(file) return try? Data(contentsOf: fileURL) } final class DiskCache<T>: CacheProtocol { func setValue(_ value: T?, forKey key: String) { } func getValue(forKey key: String) -> T? { } func fetchValue(forKey key: String, completion: @escaping (T?) -> Void) { } }

Middle+
RevolutRevolut
21

Projede bir saat içinde üretime geçmesi gerekiyorsa, belirlenen sorunları nasıl önceliklendirebilirsiniz?

Senior
Uzum
19

Önbellek uygulaması için neden final sınıf kullanılır, sınıf yerine?

Middle+
RevolutRevolut
16

enum HTTPMethod: String { case post = "POST" } enum Errors: Error { case invalidUrl case invalidQuery case invalidResponse case httpStatus(Int) } protocol MyDecoder { func decode<T: Decodable>(_: _ type: T.Type, from data: Data) throws -> T } final class NetworkService { private let session: URLSession private let encoder = JSONEncoder() private let decoder: MyDecoder init( session: URLSession = .shared, decoder: MyDecoder ) { self.session = session self.decoder = decoder } func request<Response: Decodable, Body: Encodable>( urlString: String, method: HTTPMethod, body: Body? = nil, headers: [String: String] = [:], query: [String: String] = [:] ) async throws -> Response { guard var components = URLComponents(string: urlString) else { throw Errors.invalidUrl } if !query.isEmpty { components.queryItems = query.map { URLQueryItem(name: $0.key, value: $0.value) } } guard let url = components.url else { throw Errors.invalidQuery } var request = URLRequest(url: url)

Middle+
СБЕРСБЕР
7

// İstekleri gönderen servis (get/post), url, semantiğe göre istek oluşturma (decode/encode)

Middle+
СБЕРСБЕР
4
/206