iOS
struct CustomButtonStyleView: View { var body: some View { VStack { Button("Button") { print("Tapped") } } .buttonStyle(CustomButtonStyle()) } } private struct CustomButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label .padding() .foregroundColor(.white) .frame(maxWidth: .infinity) .background(Color.red) .clipShape(RoundedRectangle(cornerRadius: 8)) } }
Cum funcționează sistemul de design între UIKit și SwiftUI — există duplicare de componente sau învelișuri?
```swift struct CustomButtonStyleView: View { var body: some View { VStack { Button("Button") { print("Tapped") } .buttonStyle(CustomButtonStyle()) } } } private struct CustomButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label .padding() .foregroundColor(.white) .background(Color.red) .clipShape(RoundedRectangle(cornerRadius: 8)) } } ``` ```swift struct CustomButtonStyleView: View { var body: some View { VStack { Button("Button") { print("Tapped") } .buttonStyle(CustomButtonStyle()) } } } private struct CustomButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label .padding() .foregroundColor(.white) .frame(maxWidth?) .background(Color.red) .clipShape(RoundedRectangle(cornerRadius: 8)) } } ``` ```swift struct CustomButtonStyleView: View { var body: some View { VStack { Button("Button") { print("Tapped") } .buttonStyle(CustomButtonStyle()) } } } private struct CustomButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label //.padding() //.foregroundColor(.white) .frame(maxWidth: .infinity) .background(Color.red) //.clipShape(RoundedRectangle(cornerRadius: 8)) } } ``` ```swift struct CustomButtonStyleView: View { var body: some View { VStack { Button("Button") { print("Tapped") } .buttonStyle(CustomButtonStyle()) .frame(width: 200) } } } private struct CustomButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label //.padding() //.foregroundColor(.white) .frame(maxWidth: .infinity) .background(Color.red) //.clipShape(RoundedRectangle(cornerRadius: 8)) } } ``` Se pare că scopul este de a personaliza un stil de buton SwiftUI, experimentând cu diferiți modificatori precum padding, culoarea de prim plan, lățimea cadrului, culoarea de fundal și forma de decupare. Probabil, întrebarea implică corectarea sau îmbunătățirea stilului butonului pentru a obține un aspect sau comportament dorit, cum ar fi umplerea întregii lățimi disponibile sau ajustarea stilului vizual.
Ce se întâmplă când nil este transmis la set?
Folosiți în prezent GCD sau Modern Concurrency (async/await) pentru sarcini noi legate de fire?
Când ai venit în proiect, era deja Swift 6 sau tranziția a avut loc în timpul tău?
```swift struct ContentView: View { var body: some View { ScrollView { content .padding(20) } .background(Color(.systemGroupedBackground)) .overlay(alignment: .bottom) { continueButton } } } ``` ```swift struct ContentView: View { var body: some View { ScrollView { content .padding(20) } .background(Color(.systemGroupedBackground)) .safeAreaInset(edge: .bottom) { continueButton } } } ```
Au fost probleme cu concurența (Sendable, Sendable nesigur, trecerea între actori) în modulele cu care ați lucrat direct?
@MainActor final class ViewModel: ObservableObject { @Published var image: UIImage? func onDownloadPhoto(url: URL) { do { let data = try Data(contentsOf: url) image = UIImage.init(data: data) } catch { log.error("Eșec la descărcarea imaginii: \(error)") } } } Button("Descarcă") { onDownloadPhoto(url) }
Există alte macro-uri în proiect în afară de stratul de rețea?
protocol SomeProtocol { func test() } func test1_1(valor: SomeProtocol) {} func test1_2(valor: any SomeProtocol) {} func test2_1(valor: some SomeProtocol) {} func test2_2<Valoare: SomeProtocol>(valor: Valoare) {} class A { func test2_2<Valoare: SomeProtocol>(valor: Valoare) { } } class B: SomeProtocol { func test() {} } class C: B {} A().test2_2(valor: B())
Prezintă-te pe scurt și descrie-ți munca actuală.
Ce se folosește pentru modulele de prezentare în UIKit și SwiftUI — ce arhitectură?
Când și cum are loc anularea atunci când se folosește DispatchQueue cu WorkItem și se apelează cancel()?
Au fost sesiuni sau cadre interesante la ultima WWDC pe care ai dori să le încerci în munca ta?
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] = [:] func setValue(_ value: T?, forKey key: String) { storage[key] = value } func getValue(forKey key: String) -> T? { return storage[key] } func fetchValue(forKey key: String, completion: @escaping (T?) -> Void) { let value = storage[key] completion(value) } } import XCTest final class 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) } } CacheTests.defaultTestSuite.run()
Dacă implementezi un ecran nou sau o funcție nouă, scrii imediat în SwiftUI, sau există discuții despre alegerea între UIKit și SwiftUI?
Vorbește despre Property Wrapper-urile utile pe care le-ai folosit în proiect
Vorbește-mi mai detaliat despre ultimul tău proiect — modulul de galerie foto de pe Avito, pentru care ai fost responsabil (închiriere pe termen scurt, formular de rezervare etc.)
Dacă ai proiecta un component reutilizabil de buton pentru un sistem de design în SwiftUI cu stiluri diferite (primar/secundar), cum l-ai implementa?