Sobes.tech

iOS

Şəbəkə qatından başqa layihədə başqa makroslar var mı?

Senior
Salmon
30

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?

Senior
Salmon
29

Layihədə SwiftUI istifadə haqqında danış — siyasət nədir, neçə ekran SwiftUI-də yazılıb

Senior
Salmon
28

Niyə önbellek yaddaşı kimi lüğət seçdiniz?

Middle+
RevolutRevolut
28

İA alətləri (Cursor, Proxyman və s.) işdə daha məhsuldar olmağa nə dərəcədə kömək edir?

Senior
Salmon
28

Layihədə istifadə etdiyiniz faydalı Property Wrapper'lar haqqında danışın

Senior
Salmon
27

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
27

// `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) { } }

Middle+
RevolutRevolut
27

Swift-də strukturlaşdırılmış eyni vaxtlılığı necə başa düşürsən? Task.detached bu anlayışa uyğundurmu?

Senior
Salmon
25

Yaddaşda olan önbellek ilə diskdə olan önbellek arasındakı fərqi izah edin.

Middle+
RevolutRevolut
24

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?

Senior
Uzum
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

Layihənin bir saat ərzində istehsalata çıxması lazım olsa, müəyyən edilmiş məsələləri necə prioritetləşdirərdiniz?

Senior
Uzum
22

Niyə önbellek tətbiqi üçün final sinf istifadə olunur, sinf yerinə?

Middle+
RevolutRevolut
17

// Sorğu göndərən xidmət (get/post), url, sorğunu semantikaya uyğun formalaşdırma (decode/encode)

Middle+
СБЕРСБЕР
8

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
/206