iOS
Şəbəkə qatından başqa layihədə başqa makroslar var mı?
Yeni ekran və ya yeni xüsusiyyət həyata keçirirsinizsə, dərhal SwiftUI-də yazırsınız, yoxsa UIKit və SwiftUI arasında seçim barədə müzakirələr olur?
Layihədə SwiftUI istifadə haqqında danış — siyasət nədir, neçə ekran SwiftUI-də yazılıb
Niyə önbellek yaddaşı kimi lüğət seçdiniz?
İA alətləri (Cursor, Proxyman və s.) işdə daha məhsuldar olmağa nə dərəcədə kömək edir?
Layihədə istifadə etdiyiniz faydalı Property Wrapper'lar haqqında danışın
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) }
// `data`-yı `file` adlı fayla yazır. 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ı faylı silir. 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ı fayldan `Data` oxuyur. Fayl mövcud deyilsə, `nil` qaytarır. 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) { } }
Swift-də strukturlaşdırılmış eyni vaxtlılığı necə başa düşürsən? Task.detached bu anlayışa uyğundurmu?
Yaddaşda olan önbellek ilə diskdə olan önbellek arasındakı fərqi izah edin.
Niyə ayrı-ayrı load və getLastCities metodları yaratdınız və məlumatlar yüklənməmişdən əvvəl getLastCities çağırılırsa nə baş verməlidir?
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) } } }
Layihənin bir saat ərzində istehsalata çıxması lazım olsa, müəyyən edilmiş məsələləri necə prioritetləşdirərdiniz?
Niyə önbellek tətbiqi üçün final sinf istifadə olunur, sinf yerinə?
// Sorğu göndərən xidmət (get/post), url, sorğunu semantikaya uyğun formalaşdırma (decode/encode)
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)