From b2504ddb07360c1951fcd0e1fd385e15166d1726 Mon Sep 17 00:00:00 2001 From: AlexOneZ Date: Wed, 26 Mar 2025 15:59:50 +0300 Subject: [PATCH 1/4] Add formater --- .DS_Store | Bin 6148 -> 6148 bytes Marketplace/.DS_Store | Bin 6148 -> 8196 bytes Marketplace/.swiftformat | 6 + .../CoreData/ProductData+CoreDataClass.swift | 7 +- .../ProductData+CoreDataProperties.swift | 21 +-- Marketplace/File.swift | 5 +- .../Marketplace.xcodeproj/project.pbxproj | 21 +++ .../UserInterfaceState.xcuserstate | Bin 119621 -> 140904 bytes Marketplace/Marketplace/.DS_Store | Bin 6148 -> 8196 bytes Marketplace/Marketplace/AppDelegate.swift | 12 +- .../Marketplace/Cart/CartProductCell.swift | 28 +-- .../Marketplace/Cart/CartViewController.swift | 64 +++---- .../CategoryViewController.swift | 71 ++++---- .../CategoriesScreen/CatgoriesCell.swift | 44 ++--- .../CategoryProductViewController.swift | 161 ++++++++++-------- .../ProductScreen/ProductViewController.swift | 53 +++--- .../ProductScreen/ProductsCell.swift | 19 +-- Marketplace/Marketplace/SceneDelegate.swift | 40 +++-- 18 files changed, 293 insertions(+), 259 deletions(-) create mode 100644 Marketplace/.swiftformat diff --git a/.DS_Store b/.DS_Store index ae19b49d0af382fe6ad6794101e979f855a15328..905253762ce6a2654c4703c95c361967dfc5c5b7 100644 GIT binary patch delta 420 zcmZoMXfc=|#>B!ku~2NHo}wTx0|Nsi1A_oVPP$=ma(-^X=0N7v%=I8)76v_rbcRfZ z5||WFjDdl9?P_GX+CP&5{lQWnK)g`K{jV#S|6pW1wYjqT=EsYFx6ikfGYHK+;M3wcegW|Jua`W=L zCjV!WXY8IV&n(56mQtLYl%Jo&2;vE#c!246EJ#oU+2x_l$|C=PE{94WoQy2NkK$J5 z2a_F{q$gW4^Xqal1TnZWI5M~}_yTD?hFpde&z$^ZXs`$Xy>tMGE&hYS#zHs7&Fmcf d9KbjLhV^&m$^0UY9Ka}G0;*xy93irX82}zlW_B)qF;Q%yo}wr-0|Nsi1A_nqLn=cFLjgk$Ln1@+#>C}}jLefA*`y}V zV{v5MKKTJlA(wb{wV{cQg0X?+p6F!wdjn4INhi diff --git a/Marketplace/.DS_Store b/Marketplace/.DS_Store index 963ab4f236e5021d982c6e9dd7ff1b38f62e4849..57b34a6ab3401b08a0c49c5d7f68b95ed9887397 100644 GIT binary patch delta 420 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aMAD6}zPH}hr%jz7$c**Q2SHn1=X zO-^7DnXJIFU6qT$jUkgEhar_gkD-{M9LP>%DDlk6Pfp6oPXZYNG`f58KNhvg?^w+0 zlgf(=pc31Y3UV@wOAHLIF)}f;u(Gjpuyb&8#0F>Nmj{<5mXsDdB^E`4cp>@uIY}^f zVp3RUYI(eXh;x2kNn&PRY7tmNW=bkhNlbWVUP^wsQ+{b)N-`&Btl~Un!9{sF`FZIe9g}ylwlXutF96bdlMC2*m>C!vCLd%o=FiPfae?|8 y7`7lWN5&1Ct$405b4hRmb-IGWdb1$Mcjn3bBA%1|c{n(Lwu7R9VRJms9A*H?e`?(T delta 179 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~50$jHAjU^g=(|KtP#k;w`I+b1s( z5}&LjXg1kYXy)WELQTw!4-ZZLD5NKnoA2V1l#`zXGULn1*WQr=#~eWtlV1w+pbBV< z@G%-}EM#F^%+A3f$PCl~1OnVZ!WCri#=`H+llf&lL9Sq6g189eNQTYvJad= NSFetchRequest { +public extension ProductData { + @nonobjc class func fetchRequest() -> NSFetchRequest { return NSFetchRequest(entityName: "ProductData") } - @NSManaged public var productImage: Data? - @NSManaged public var productTitle: String? - @NSManaged public var productPrice: String? - @NSManaged public var productDescription: String? - + @NSManaged var productImage: Data? + @NSManaged var productTitle: String? + @NSManaged var productPrice: String? + @NSManaged var productDescription: String? } -extension ProductData : Identifiable { - -} +extension ProductData: Identifiable {} diff --git a/Marketplace/File.swift b/Marketplace/File.swift index b512f7c..524ba5e 100644 --- a/Marketplace/File.swift +++ b/Marketplace/File.swift @@ -8,11 +8,8 @@ import Foundation final class MyClass: Sendable { - @Sendable func loadPages() async { - await withTaskGroup(of: Void.self) { group in - + await withTaskGroup(of: Void.self) { _ in } } - } diff --git a/Marketplace/Marketplace.xcodeproj/project.pbxproj b/Marketplace/Marketplace.xcodeproj/project.pbxproj index ee86c6b..1fc1d41 100644 --- a/Marketplace/Marketplace.xcodeproj/project.pbxproj +++ b/Marketplace/Marketplace.xcodeproj/project.pbxproj @@ -142,6 +142,7 @@ 5B02EC5028E4234300124D5B /* Sources */, 5B02EC5128E4234300124D5B /* Frameworks */, 5B02EC5228E4234300124D5B /* Resources */, + 5BA6121C2D942DFD00FF5BD2 /* ShellScript */, ); buildRules = ( ); @@ -198,6 +199,26 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 5BA6121C2D942DFD00FF5BD2 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nif which swiftformat > /dev/null; then\n swiftformat .\n echo \"Start scanning\"\nelse \n echo \"WARNING: SwiftLing not installed!\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 5B02EC5028E4234300124D5B /* Sources */ = { isa = PBXSourcesBuildPhase; diff --git a/Marketplace/Marketplace.xcodeproj/project.xcworkspace/xcuserdata/aleksey.xcuserdatad/UserInterfaceState.xcuserstate b/Marketplace/Marketplace.xcodeproj/project.xcworkspace/xcuserdata/aleksey.xcuserdatad/UserInterfaceState.xcuserstate index 960c9bd80dd05c9589ccb7c511d55852cc950377..26adede689ecf13fef6c11d90da20e5632b3c191 100644 GIT binary patch literal 140904 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 literal 119621 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 D5(>_p diff --git a/Marketplace/Marketplace/.DS_Store b/Marketplace/Marketplace/.DS_Store index 785cd8886081babb87cfe2b54dfef27bc7731cc7..b37c829ebe5c259d917d44ffd01c8699c52c72c6 100644 GIT binary patch literal 8196 zcmeHM%Wl&^6upxM>b9yV?=FgD39+k6TFOgo(ljh8gj8V!3qU2QO>1yGQS1;GHFkl!k4Ezra;LaAw>T~a_UQ-$d z3oinVF7In4BFrTdET)D``r@fMH-K10r@mN(Lg5cfyGJ)>2;1L(D6(C;(oQL0F7F=K#rw20H= zG=`nYV2ZQ|Oe?!G_PU>5ur}+g@~raso2fgi=C(l=HZDjqsKYzw98^6IoeO1Rv7S595%tgacOoum~dnUz6j*wHt7&zPLuWt14C+^ zlOq1Vjw{Q&2iPZuGs`p#{6z*>vFcPS7;yV0%#JN$Z5#O^vPeR&tE7aWkl{F_496jR ke;A@}LsekPT6UF03(`M-5n%3r-0-;P&HXR^@1PdH056BjY5)KL delta 134 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~50COa|<>Wu4ZNw znEXOu&g3J4+b2I3Ql0E0d~dR==+cFyjEmVhI0Tu2T7W=+8%Vfw} R1}2ClAbS}$$Mei#1^_&-8s7i_ diff --git a/Marketplace/Marketplace/AppDelegate.swift b/Marketplace/Marketplace/AppDelegate.swift index ff74630..f0f5b84 100644 --- a/Marketplace/Marketplace/AppDelegate.swift +++ b/Marketplace/Marketplace/AppDelegate.swift @@ -9,28 +9,22 @@ import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { - - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } // MARK: UISceneSession Lifecycle - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + func application(_: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options _: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + func application(_: UIApplication, didDiscardSceneSessions _: Set) { // Called when the user discards a scene session. // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. // Use this method to release any resources that were specific to the discarded scenes, as they will not return. } - - } - diff --git a/Marketplace/Marketplace/Cart/CartProductCell.swift b/Marketplace/Marketplace/Cart/CartProductCell.swift index a5466da..94f7c36 100644 --- a/Marketplace/Marketplace/Cart/CartProductCell.swift +++ b/Marketplace/Marketplace/Cart/CartProductCell.swift @@ -8,14 +8,13 @@ import UIKit class CartProductCell: UITableViewCell { - private lazy var image: UIImageView = { let image = UIImageView(image: UIImage(systemName: "tshirt")) image.translatesAutoresizingMaskIntoConstraints = false image.contentMode = .scaleAspectFit return image }() - + private lazy var titleLabel: UILabel = { let label = UILabel() label.font = UIFont.systemFont(ofSize: 20, weight: .medium) @@ -25,7 +24,7 @@ class CartProductCell: UITableViewCell { label.translatesAutoresizingMaskIntoConstraints = false return label }() - + private lazy var priceLabel: UILabel = { let label = UILabel() label.font = UIFont.systemFont(ofSize: 16, weight: .bold) @@ -34,38 +33,39 @@ class CartProductCell: UITableViewCell { label.translatesAutoresizingMaskIntoConstraints = false return label }() - + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) - + contentView.addSubview(image) contentView.addSubview(titleLabel) contentView.addSubview(priceLabel) - + setupConstraints() } - - required init?(coder: NSCoder) { + + @available(*, unavailable) + required init?(coder _: NSCoder) { fatalError("init(coder:) has not been implemented") } - + private func setupConstraints() { - image.widthAnchor.constraint(equalToConstant: contentView.frame.width/4).isActive = true + image.widthAnchor.constraint(equalToConstant: contentView.frame.width / 4).isActive = true image.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 5).isActive = true image.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true image.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true - - priceLabel.widthAnchor.constraint(equalToConstant: contentView.frame.width/4).isActive = true + + priceLabel.widthAnchor.constraint(equalToConstant: contentView.frame.width / 4).isActive = true priceLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true priceLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true priceLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -5).isActive = true - + titleLabel.leadingAnchor.constraint(equalTo: image.trailingAnchor, constant: 10).isActive = true titleLabel.trailingAnchor.constraint(equalTo: priceLabel.leadingAnchor, constant: -10).isActive = true titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true } - + func configure(_ viewModel: ProductData) { titleLabel.text = viewModel.productTitle priceLabel.text = (viewModel.productPrice ?? "") + "$" diff --git a/Marketplace/Marketplace/Cart/CartViewController.swift b/Marketplace/Marketplace/Cart/CartViewController.swift index d7f320a..286d4ab 100644 --- a/Marketplace/Marketplace/Cart/CartViewController.swift +++ b/Marketplace/Marketplace/Cart/CartViewController.swift @@ -5,23 +5,23 @@ // Created by Алексей Кобяков on 29.09.2022. // -import UIKit import CoreData +import UIKit class CartViewController: UIViewController { private let persistentContainer = NSPersistentContainer(name: "Model") let cellID: String = "CartProductCell" var productsInCart: [Product] = [] - + private lazy var tableView: UITableView = { let tableView = UITableView() tableView.translatesAutoresizingMaskIntoConstraints = false tableView.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) tableView.separatorColor = .systemGray4 - tableView.rowHeight = view.frame.height/6 + tableView.rowHeight = view.frame.height / 6 return tableView }() - + private lazy var fetchedResultController: NSFetchedResultsController = { let fetchRequest = ProductData.fetchRequest() let sortDescriptor = NSSortDescriptor(key: "productTitle", ascending: true) @@ -34,44 +34,44 @@ class CartViewController: UIViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) print("viewWillAppear") - self.tableView.reloadData() + tableView.reloadData() } override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white - + tableView.register(CartProductCell.self, forCellReuseIdentifier: cellID) tableView.delegate = self tableView.dataSource = self view.addSubview(tableView) setupContstraints() - //print("cart open") + // print("cart open") loadContainer() } - + private func setupContstraints() { tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true tableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50).isActive = true tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true } - + func updateTableViewElements(product: Product) { - self.productsInCart.append(product) + productsInCart.append(product) print(productsInCart.count) - //saveCart() + // saveCart() print("Add to cart item") - let productData = ProductData.init(entity: NSEntityDescription.entity(forEntityName: "ProductData", in: persistentContainer.viewContext)!, insertInto: persistentContainer.viewContext) + let productData = ProductData(entity: NSEntityDescription.entity(forEntityName: "ProductData", in: persistentContainer.viewContext)!, insertInto: persistentContainer.viewContext) productData.productImage = product.productImage.pngData() productData.productPrice = product.productPrice productData.productDescription = product.productDescription productData.productTitle = product.productTitle try? productData.managedObjectContext?.save() } - + private func loadContainer() { - persistentContainer.loadPersistentStores { persistentStoreDescription, error in + persistentContainer.loadPersistentStores { _, error in if let error = error { print("Unable to load persistent store") print("\(error)") @@ -86,42 +86,45 @@ class CartViewController: UIViewController { print("FetchedObj \(fetchedResultController.sections?[0].numberOfObjects ?? 99)") } } + // MARK: - extenstions + extension CartViewController: UITableViewDelegate { - func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + func tableView(_ tableView: UITableView, viewForHeaderInSection _: Int) -> UIView? { let label = UILabel() - label.frame = CGRect.init(x: 15, y: 5, width: tableView.frame.width-10, height: tableView.frame.height-10) - label.text = "Cart" + label.frame = CGRect(x: 15, y: 5, width: tableView.frame.width - 10, height: tableView.frame.height - 10) + label.text = "Cart" label.font = .systemFont(ofSize: 25, weight: .bold) label.textColor = .black return label } - func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + + func tableView(_: UITableView, heightForHeaderInSection _: Int) -> CGFloat { 45 } } extension CartViewController: UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { if let sections = fetchedResultController.sections { return sections[section].numberOfObjects } return 0 } - + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let productData = fetchedResultController.object(at: indexPath) let cell = tableView.dequeueReusableCell(withIdentifier: cellID) as? CartProductCell cell?.configure(productData) return cell ?? UITableViewCell() } - - func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + + func tableView(_: UITableView, canEditRowAt _: IndexPath) -> Bool { true } - - func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { - if(editingStyle == .delete) { + + func tableView(_: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { let productData = fetchedResultController.object(at: indexPath) persistentContainer.viewContext.delete(productData) try? persistentContainer.viewContext.save() @@ -130,16 +133,15 @@ extension CartViewController: UITableViewDataSource { } extension CartViewController: NSFetchedResultsControllerDelegate { - func controllerWillChangeContent(_ controller: NSFetchedResultsController) { + func controllerWillChangeContent(_: NSFetchedResultsController) { tableView.beginUpdates() } - - func controllerDidChangeContent(_ controller: NSFetchedResultsController) { + + func controllerDidChangeContent(_: NSFetchedResultsController) { tableView.endUpdates() } - - func controller(_ controller: NSFetchedResultsController, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) { - + + func controller(_: NSFetchedResultsController, didChange _: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) { switch type { case .insert: if let indexPath = newIndexPath { diff --git a/Marketplace/Marketplace/CategoriesScreen/CategoryViewController.swift b/Marketplace/Marketplace/CategoriesScreen/CategoryViewController.swift index c7030e4..8efc8ff 100644 --- a/Marketplace/Marketplace/CategoriesScreen/CategoryViewController.swift +++ b/Marketplace/Marketplace/CategoriesScreen/CategoryViewController.swift @@ -1,5 +1,5 @@ // -// ViewController.swift +// CategoryViewController.swift // Marketplace // // Created by Алексей Кобяков on 28.09.2022. @@ -8,46 +8,54 @@ import UIKit class CategoryViewController: UIViewController { - let categories: [CategoryCell] = [ - CategoryCell(iconCategory: "👕", - description: "Men's clothes", - jsonRequest: "men's%20clothing"), - CategoryCell(iconCategory: "👚", - description: "Women's clothes", - jsonRequest: "women's%20clothing" - ), - CategoryCell(iconCategory: "🖥", - description: "Electronics", - jsonRequest: "electronics"), - CategoryCell(iconCategory: "💎", - description: "Jeweliry", - jsonRequest: "jewelery") + CategoryCell( + iconCategory: "👕", + description: "Men's clothes", + jsonRequest: "men's%20clothing" + ), + CategoryCell( + iconCategory: "👚", + description: "Women's clothes", + jsonRequest: "women's%20clothing" + ), + CategoryCell( + iconCategory: "🖥", + description: "Electronics", + jsonRequest: "electronics" + ), + CategoryCell( + iconCategory: "💎", + description: "Jeweliry", + jsonRequest: "jewelery" + ) ] - + private lazy var collectionView: UICollectionView = { let layout = UICollectionViewFlowLayout() layout.scrollDirection = .vertical layout.minimumLineSpacing = 15 layout.minimumInteritemSpacing = 5 - layout.itemSize = CGSize(width: (view.frame.width/2) + 100 , - height: view.frame.height/6) - + layout.itemSize = CGSize( + width: (view.frame.width / 2) + 100, + height: view.frame.height / 6 + ) + let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) collectionView.translatesAutoresizingMaskIntoConstraints = false collectionView.backgroundColor = .white return collectionView }() - + override func viewDidLoad() { super.viewDidLoad() title = "Categories" view.backgroundColor = .white - + collectionView.register(CategoriesCell.self, forCellWithReuseIdentifier: "CategoryCell") collectionView.delegate = self collectionView.dataSource = self - + view.addSubview(collectionView) setupView() } @@ -59,33 +67,34 @@ class CategoryViewController: UIViewController { collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -110).isActive = true } } + // MARK: - Extensions + extension CategoryViewController: UICollectionViewDelegate { - func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + func collectionView(_: UICollectionView, didSelectItemAt indexPath: IndexPath) { let viewModel = categories[indexPath.row] print("Selected: \(viewModel.description)") - + let categoryProductViewController = CategoryProductViewController() categoryProductViewController.categoryTitle = viewModel.description categoryProductViewController.productDownload( urlString: "https://fakestoreapi.com/products/category/\(viewModel.jsonRequest)") - navigationController?.pushViewController(categoryProductViewController, - animated: true) + navigationController?.pushViewController( + categoryProductViewController, + animated: true + ) } } extension CategoryViewController: UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CategoryCell", for: indexPath) as! CategoriesCell let viewModel = categories[indexPath.row] cell.configure(viewModel) return cell } - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + + func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int { categories.count } - } - diff --git a/Marketplace/Marketplace/CategoriesScreen/CatgoriesCell.swift b/Marketplace/Marketplace/CategoriesScreen/CatgoriesCell.swift index c2295bb..1689708 100644 --- a/Marketplace/Marketplace/CategoriesScreen/CatgoriesCell.swift +++ b/Marketplace/Marketplace/CategoriesScreen/CatgoriesCell.swift @@ -14,7 +14,6 @@ struct CategoryCell { } class CategoriesCell: UICollectionViewCell { - private lazy var iconCategoryLabel: UILabel = { let label = UILabel() label.font = UIFont.systemFont(ofSize: 50) @@ -23,47 +22,50 @@ class CategoriesCell: UICollectionViewCell { label.textAlignment = .center return label }() - + private lazy var descriptionCategoryLabel: UILabel = { let label = UILabel() label.font = UIFont.systemFont(ofSize: 20, weight: .semibold) label.textColor = .black label.textAlignment = .center - //translatesAutoresizingMaskIntoConstraints = false + // translatesAutoresizingMaskIntoConstraints = false return label }() - + override init(frame: CGRect) { super.init(frame: frame) - + contentView.addSubview(iconCategoryLabel) contentView.addSubview(descriptionCategoryLabel) backgroundColor = .systemGray6 - + setupView() - } - + private func setupView() { - iconCategoryLabel.frame = CGRect(x: 0, - y: contentView.frame.size.height - 105, - width: contentView.frame.size.width, - height: 50) - descriptionCategoryLabel.frame = CGRect(x: 0, - y: contentView.frame.size.height - 60, - width: contentView.frame.size.width , - height: 50) + iconCategoryLabel.frame = CGRect( + x: 0, + y: contentView.frame.size.height - 105, + width: contentView.frame.size.width, + height: 50 + ) + descriptionCategoryLabel.frame = CGRect( + x: 0, + y: contentView.frame.size.height - 60, + width: contentView.frame.size.width, + height: 50 + ) layer.cornerRadius = 20 } - + func configure(_ viewModel: CategoryCell) { iconCategoryLabel.text = viewModel.iconCategory descriptionCategoryLabel.text = viewModel.description - //print(viewModel.iconCategory) + // print(viewModel.iconCategory) } - - required init?(coder: NSCoder) { + + @available(*, unavailable) + required init?(coder _: NSCoder) { fatalError("init(coder:) has not be implemented") } } - diff --git a/Marketplace/Marketplace/ProductScreen/CategoryProductViewController.swift b/Marketplace/Marketplace/ProductScreen/CategoryProductViewController.swift index 7c6b22b..5bd306a 100644 --- a/Marketplace/Marketplace/ProductScreen/CategoryProductViewController.swift +++ b/Marketplace/Marketplace/ProductScreen/CategoryProductViewController.swift @@ -1,5 +1,5 @@ // -// ProductViewController.swift +// CategoryProductViewController.swift // Marketplace // // Created by Алексей Кобяков on 04.10.2022. @@ -12,135 +12,143 @@ class CategoryProductViewController: UIViewController { let cellID: String = "CategoryProduct" var categoryTitle: String? var products: [Product] = [] - + private lazy var tableView: UITableView = { let tableView = UITableView() tableView.translatesAutoresizingMaskIntoConstraints = false tableView.allowsSelection = true tableView.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) tableView.separatorColor = .systemGray4 - tableView.rowHeight = view.frame.height/2 - + tableView.rowHeight = view.frame.height / 2 + return tableView }() - + private lazy var activityIndicator: UIActivityIndicatorView = { - let indicator = UIActivityIndicatorView(frame: CGRect(x: view.frame.width/2 - 75, y: 40, width: 150, height: 150)) + let indicator = UIActivityIndicatorView(frame: CGRect(x: view.frame.width / 2 - 75, y: 40, width: 150, height: 150)) return indicator }() -// MARK: - ViewDidLoad + + // MARK: - ViewDidLoad + override func viewDidLoad() { super.viewDidLoad() - + title = categoryTitle ?? "No category" view.backgroundColor = .white - + tableView.register(ProductsCell.self, forCellReuseIdentifier: cellID) tableView.delegate = self tableView.dataSource = self view.addSubview(tableView) setupContstraints() } - + private func setupContstraints() { tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true } - + func productDownload(urlString: String) { activityIndicator.startAnimating() let url = URL(string: urlString) var request = URLRequest(url: url!) request.httpMethod = "GET" request.allHTTPHeaderFields = ["accept": "application/json"] - + let task = URLSession.shared.dataTask( - with: request) { - data, response, error in - DispatchQueue.global().async { - [weak self] in - guard let self = self else { return } - print("async") - if let error = error { - print(error) - } else { - print("try") - if let data = data, - let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]]{ - print("Yes!") - print("Succes") - var index: Int = 0 - for product in json { - self.products.append(Product(productTitle: "", - productPrice: "", - productDescription: "", - productURLImage: "", - productImage: UIImage() - )) - if let title = product["title"] as? String { - self.products[index].productTitle = title - } - if let description = product["description"] as? String { - self.products[index].productDescription = description - } - if let price = product["price"] as? Double { - self.products[index].productPrice = String(price) - } - if let imageURL = product["image"] as? String { - self.products[index].productURLImage = imageURL - } - index += 1 - } - DispatchQueue.main.async { - self.tableView.reloadData() - self.loadImages() + with: request) + { + data, _, error in + DispatchQueue.global().async { + [weak self] in + guard let self = self else { return } + print("async") + if let error = error { + print(error) + } else { + print("try") + if let data = data, + let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] + { + print("Yes!") + print("Succes") + var index = 0 + for product in json { + self.products.append(Product( + productTitle: "", + productPrice: "", + productDescription: "", + productURLImage: "", + productImage: UIImage() + )) + if let title = product["title"] as? String { + self.products[index].productTitle = title + } + if let description = product["description"] as? String { + self.products[index].productDescription = description + } + if let price = product["price"] as? Double { + self.products[index].productPrice = String(price) } + if let imageURL = product["image"] as? String { + self.products[index].productURLImage = imageURL + } + index += 1 + } + DispatchQueue.main.async { + self.tableView.reloadData() + self.loadImages() } } } - } + } task.resume() } - + private func loadImages() { let dispatchGroup = DispatchGroup() view.addSubview(activityIndicator) - for index in 0...(products.count - 1) { + for index in 0 ... (products.count - 1) { dispatchGroup.enter() - - asyncLoadImage(imageStringURL: products[index].productURLImage, - runQueue: DispatchQueue.global(), - completionQueue: DispatchQueue.main) { result, error in - guard let image = result else {return} + + asyncLoadImage( + imageStringURL: products[index].productURLImage, + runQueue: DispatchQueue.global(), + completionQueue: DispatchQueue.main + ) { result, _ in + guard let image = result else { return } self.products[index].productImage = image dispatchGroup.leave() } } - + dispatchGroup.notify(queue: DispatchQueue.main) { [weak self] in - guard let self = self else {return} + guard let self = self else { return } print("notify") self.activityIndicator.stopAnimating() self.activityIndicator.removeFromSuperview() self.tableView.reloadData() } } + private func asyncLoadImage( imageStringURL: String, runQueue: DispatchQueue, completionQueue: DispatchQueue, - completion: @escaping (UIImage?, Error?) -> () - ){ + completion: @escaping (UIImage?, Error?) -> Void + ) { runQueue.async { do { let image = self.downloadImage(urlString: imageStringURL) completionQueue.async { completion(image, nil) } - } + } } } + private func downloadImage(urlString: String) -> UIImage? { guard let url = URL(string: urlString), @@ -149,32 +157,35 @@ class CategoryProductViewController: UIViewController { print("Ошибка, не удалось загрузить изображение") return nil } - + return UIImage(data: data) } } + // MARK: - TableViewDelegate -extension CategoryProductViewController: UITableViewDelegate { - -} + +extension CategoryProductViewController: UITableViewDelegate {} + // MARK: - TableViewDataSource + extension CategoryProductViewController: UITableViewDataSource { - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellID) as? ProductsCell let viewModel = products[indexPath.row] cell?.configure(viewModel) return cell ?? UITableViewCell() } - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int { products.count } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { let productVC = ProductViewController() productVC.product = products[indexPath.row] - navigationController?.pushViewController(productVC, - animated: true) + navigationController?.pushViewController( + productVC, + animated: true + ) } } diff --git a/Marketplace/Marketplace/ProductScreen/ProductViewController.swift b/Marketplace/Marketplace/ProductScreen/ProductViewController.swift index a9cfd79..1e7efa3 100644 --- a/Marketplace/Marketplace/ProductScreen/ProductViewController.swift +++ b/Marketplace/Marketplace/ProductScreen/ProductViewController.swift @@ -9,8 +9,8 @@ import UIKit class ProductViewController: UIViewController { var product: Product? - // let cartVC = CartViewController() - + // let cartVC = CartViewController() + private lazy var descriptionLabel: UILabel = { let label = UILabel() label.font = UIFont.systemFont(ofSize: 16, weight: .medium) @@ -20,7 +20,7 @@ class ProductViewController: UIViewController { label.translatesAutoresizingMaskIntoConstraints = false return label }() - + private lazy var priceLabel: UILabel = { let label = UILabel() label.font = UIFont.systemFont(ofSize: 20, weight: .bold) @@ -30,14 +30,14 @@ class ProductViewController: UIViewController { label.translatesAutoresizingMaskIntoConstraints = false return label }() - + private lazy var image: UIImageView = { let image = UIImageView(image: UIImage(systemName: "tshirt")) image.translatesAutoresizingMaskIntoConstraints = false image.contentMode = .scaleAspectFit return image }() - + private lazy var scrollView: UIScrollView = { let scrollView = UIScrollView() scrollView.translatesAutoresizingMaskIntoConstraints = false @@ -46,7 +46,7 @@ class ProductViewController: UIViewController { scrollView.showsHorizontalScrollIndicator = false return scrollView }() - + private lazy var button: UIButton = { let button = UIButton() button.setTitle("Add to Cart", for: .normal) @@ -58,16 +58,16 @@ class ProductViewController: UIViewController { button.layer.cornerRadius = 12 return button }() - + override func viewDidLoad() { super.viewDidLoad() - + title = product?.productTitle ?? "No" view.backgroundColor = .white descriptionLabel.text = product?.productDescription priceLabel.text = (product?.productPrice ?? "") + "$" image.image = product?.productImage - + view.addSubview(image) view.addSubview(scrollView) view.addSubview(priceLabel) @@ -75,47 +75,48 @@ class ProductViewController: UIViewController { view.addSubview(button) setupConstraints() } - + @objc private func addToCart() { - //print("Add to cart item") + // print("Add to cart item") let vc = tabBarController?.viewControllers?[1] as? CartViewController vc?.updateTableViewElements(product: product!) showAddCartAlert() } - + private func showAddCartAlert() { let alert = UIAlertController( title: "Product add!", message: "Item successfully added to cart!", - preferredStyle: .alert) - + preferredStyle: .alert + ) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) - - self.present(alert, animated: true, completion: nil) + + present(alert, animated: true, completion: nil) } - + private func setupConstraints() { // image constraints image.heightAnchor.constraint(equalToConstant: 300).isActive = true image.topAnchor.constraint(equalTo: view.topAnchor, constant: 115).isActive = true - //image.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -(view.frame.height/3)).isActive = true + // image.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -(view.frame.height/3)).isActive = true image.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true image.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true - + // price constraints priceLabel.heightAnchor.constraint(equalToConstant: 50).isActive = true priceLabel.topAnchor.constraint(equalTo: image.bottomAnchor, constant: 15).isActive = true - //priceLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true + // priceLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true priceLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true priceLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true - + // button constraints button.heightAnchor.constraint(equalToConstant: 50).isActive = true - //button.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: 5).isActive = true + // button.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: 5).isActive = true button.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -95).isActive = true button.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true button.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true - + // description constraints // descriptionLabel.topAnchor.constraint(equalTo: priceLabel.bottomAnchor, constant: -5).isActive = true // descriptionLabel.bottomAnchor.constraint(equalTo: button.topAnchor, constant: -5).isActive = true @@ -132,11 +133,13 @@ class ProductViewController: UIViewController { descriptionLabel.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 1).isActive = true } } + // MARK: - extensions + extension ProductViewController: UIScrollViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { if scrollView.contentOffset.x != 0 { - scrollView.contentOffset.x = 0 - } + scrollView.contentOffset.x = 0 + } } } diff --git a/Marketplace/Marketplace/ProductScreen/ProductsCell.swift b/Marketplace/Marketplace/ProductScreen/ProductsCell.swift index c925a57..ede4eaf 100644 --- a/Marketplace/Marketplace/ProductScreen/ProductsCell.swift +++ b/Marketplace/Marketplace/ProductScreen/ProductsCell.swift @@ -16,7 +16,6 @@ struct Product { } class ProductsCell: UITableViewCell { - private lazy var productTitleLabel: UILabel = { let label = UILabel() label.font = UIFont.systemFont(ofSize: 16, weight: .medium) @@ -26,7 +25,7 @@ class ProductsCell: UITableViewCell { label.translatesAutoresizingMaskIntoConstraints = false return label }() - + private lazy var productPriceLabel: UILabel = { let label = UILabel() label.font = UIFont.systemFont(ofSize: 20, weight: .bold) @@ -35,13 +34,13 @@ class ProductsCell: UITableViewCell { label.translatesAutoresizingMaskIntoConstraints = false return label }() - + private lazy var productImage: UIImageView = { let image = UIImageView(image: UIImage(systemName: "tshirt")) image.contentMode = .scaleAspectFit return image }() - + private lazy var stackView: UIStackView = { let stackView = UIStackView() stackView.translatesAutoresizingMaskIntoConstraints = false @@ -55,26 +54,26 @@ class ProductsCell: UITableViewCell { stackView.addArrangedSubview(productPriceLabel) return stackView }() - + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) - + contentView.addSubview(stackView) stackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true stackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true stackView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -10).isActive = true stackView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 10).isActive = true } - - required init?(coder: NSCoder) { + + @available(*, unavailable) + required init?(coder _: NSCoder) { fatalError("init(coder:) has not been implemented") } - + func configure(_ viewModel: Product) { print(viewModel.productTitle) productTitleLabel.text = viewModel.productTitle productPriceLabel.text = viewModel.productPrice + "$" productImage.image = viewModel.productImage } - } diff --git a/Marketplace/Marketplace/SceneDelegate.swift b/Marketplace/Marketplace/SceneDelegate.swift index 10857f5..417888e 100644 --- a/Marketplace/Marketplace/SceneDelegate.swift +++ b/Marketplace/Marketplace/SceneDelegate.swift @@ -8,66 +8,64 @@ import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { - var window: UIWindow? - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + func scene(_ scene: UIScene, willConnectTo _: UISceneSession, options _: UIScene.ConnectionOptions) { // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). guard let windowScene = (scene as? UIWindowScene) else { return } let window = UIWindow(windowScene: windowScene) - + let categoryVC = CategoryViewController() let cartVC = CartViewController() cartVC.viewDidLoad() let navigationController = UINavigationController(rootViewController: categoryVC) - - categoryVC.tabBarItem = UITabBarItem(title: "Categories", - image: UIImage(systemName: "magnifyingglass.circle"), - selectedImage: UIImage(systemName: "magnifyingglass.circle.fill")) - cartVC.tabBarItem = UITabBarItem(title: "Cart", - image: UIImage(systemName: "cart"), - selectedImage: UIImage(systemName: "cart.fill")) - + + categoryVC.tabBarItem = UITabBarItem( + title: "Categories", + image: UIImage(systemName: "magnifyingglass.circle"), + selectedImage: UIImage(systemName: "magnifyingglass.circle.fill") + ) + cartVC.tabBarItem = UITabBarItem( + title: "Cart", + image: UIImage(systemName: "cart"), + selectedImage: UIImage(systemName: "cart.fill") + ) + let tabBarController = UITabBarController() tabBarController.setViewControllers([navigationController, cartVC], animated: true) - window.rootViewController = tabBarController self.window = window window.makeKeyAndVisible() } - func sceneDidDisconnect(_ scene: UIScene) { + func sceneDidDisconnect(_: UIScene) { // Called as the scene is being released by the system. // This occurs shortly after the scene enters the background, or when its session is discarded. // Release any resources associated with this scene that can be re-created the next time the scene connects. // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). } - func sceneDidBecomeActive(_ scene: UIScene) { + func sceneDidBecomeActive(_: UIScene) { // Called when the scene has moved from an inactive state to an active state. // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. } - func sceneWillResignActive(_ scene: UIScene) { + func sceneWillResignActive(_: UIScene) { // Called when the scene will move from an active state to an inactive state. // This may occur due to temporary interruptions (ex. an incoming phone call). } - func sceneWillEnterForeground(_ scene: UIScene) { + func sceneWillEnterForeground(_: UIScene) { // Called as the scene transitions from the background to the foreground. // Use this method to undo the changes made on entering the background. } - func sceneDidEnterBackground(_ scene: UIScene) { + func sceneDidEnterBackground(_: UIScene) { // Called as the scene transitions from the foreground to the background. // Use this method to save data, release shared resources, and store enough scene-specific state information // to restore the scene back to its current state. } - - } - From 2d55a4870858cb8b3d95a93493829efd9998845a Mon Sep 17 00:00:00 2001 From: AlexOneZ Date: Wed, 26 Mar 2025 16:30:23 +0300 Subject: [PATCH 2/4] some changes --- .DS_Store | Bin 6148 -> 6148 bytes Marketplace/.swiftformat | 4 ++-- .../Marketplace.xcodeproj/project.pbxproj | 2 +- .../UserInterfaceState.xcuserstate | Bin 140904 -> 139247 bytes README.md | 4 ++++ 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.DS_Store b/.DS_Store index 905253762ce6a2654c4703c95c361967dfc5c5b7..a2a8bada9559624cf50131fdea2d3b0de47ef573 100644 GIT binary patch delta 143 zcmZoMXfc@JFDk&mz`)4BAi&_6lb@WFlb;0S3v5hW&TI;jVPVi?NN31oC_$D5YUl>a z>HP--APY&|4e|g0 diff --git a/Marketplace/.swiftformat b/Marketplace/.swiftformat index 91dd33c..629e780 100644 --- a/Marketplace/.swiftformat +++ b/Marketplace/.swiftformat @@ -1,5 +1,5 @@ ---indent 4 # Устанавливает отступы в 4 пробела (по умолчанию 4 пробела) ---linebreaks lf # Использует Unix-стиль перевода строк (LF вместо CRLF) +--indent 4 # Отступы в 4 пробела +--linebreaks crlf # Использует Unix-стиль перевода строк (LF вместо CRLF) --wraparguments before-first # Переносит аргументы на новую строку --stripunusedargs closure-only # Удаляет неиспользуемые аргументы только у замыканий --commas inline # Оставляет запятые в той же строке diff --git a/Marketplace/Marketplace.xcodeproj/project.pbxproj b/Marketplace/Marketplace.xcodeproj/project.pbxproj index 1fc1d41..3b7b6d2 100644 --- a/Marketplace/Marketplace.xcodeproj/project.pbxproj +++ b/Marketplace/Marketplace.xcodeproj/project.pbxproj @@ -215,7 +215,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nif which swiftformat > /dev/null; then\n swiftformat .\n echo \"Start scanning\"\nelse \n echo \"WARNING: SwiftLing not installed!\"\nfi\n"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nif which swiftformat > /dev/null; then\n swiftformat .\n echo \"Start scanning...\"\nelse \n echo \"WARNING: SwiftLing not installed!\"\nfi\n"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/Marketplace/Marketplace.xcodeproj/project.xcworkspace/xcuserdata/aleksey.xcuserdatad/UserInterfaceState.xcuserstate b/Marketplace/Marketplace.xcodeproj/project.xcworkspace/xcuserdata/aleksey.xcuserdatad/UserInterfaceState.xcuserstate index 26adede689ecf13fef6c11d90da20e5632b3c191..032ad00afcb7c21f5eecbf376e4813c98bee968e 100644 GIT binary patch literal 139247 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�N=yh{T6U+)N?@V7*V`BO5(m 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%0AmTw>EM(W2(AHJ;{%e{CHF3hzM35Pmugv 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 diff --git a/README.md b/README.md index f58a9a0..d090980 100644 --- a/README.md +++ b/README.md @@ -39,3 +39,7 @@ CategoriesCell - отвечат за ячейку CollectionView CategoryViewCon - UICollectionView 3. Для сохранения корзины использовал CoreData. +''' +Brew install swiftformat +''' + From cc9ffb86840e75e853c1b9a7d01751b100a2a1d2 Mon Sep 17 00:00:00 2001 From: AlexOneZ Date: Wed, 26 Mar 2025 16:32:09 +0300 Subject: [PATCH 3/4] change md --- .../CoreData/ProductData+CoreDataClass.swift | 24 +- .../ProductData+CoreDataProperties.swift | 46 +-- Marketplace/File.swift | 30 +- .../UserInterfaceState.xcuserstate | Bin 139247 -> 139247 bytes Marketplace/Marketplace/AppDelegate.swift | 60 +-- .../Marketplace/Cart/CartProductCell.swift | 148 +++---- .../Marketplace/Cart/CartViewController.swift | 338 ++++++++-------- .../CategoryViewController.swift | 200 ++++----- .../CategoriesScreen/CatgoriesCell.swift | 142 +++---- Marketplace/Marketplace/Keys.swift | 20 +- .../CategoryProductViewController.swift | 382 +++++++++--------- .../ProductScreen/ProductViewController.swift | 290 ++++++------- .../ProductScreen/ProductsCell.swift | 158 ++++---- Marketplace/Marketplace/SceneDelegate.swift | 142 +++---- 14 files changed, 990 insertions(+), 990 deletions(-) diff --git a/Marketplace/CoreData/ProductData+CoreDataClass.swift b/Marketplace/CoreData/ProductData+CoreDataClass.swift index 2b0936e..5fffe9a 100644 --- a/Marketplace/CoreData/ProductData+CoreDataClass.swift +++ b/Marketplace/CoreData/ProductData+CoreDataClass.swift @@ -1,12 +1,12 @@ -// -// ProductData+CoreDataClass.swift -// Marketplace -// -// Created by Алексей Кобяков on 22.10.2022. -// -// - -import CoreData -import Foundation - -public class ProductData: NSManagedObject {} +// +// ProductData+CoreDataClass.swift +// Marketplace +// +// Created by Алексей Кобяков on 22.10.2022. +// +// + +import CoreData +import Foundation + +public class ProductData: NSManagedObject {} diff --git a/Marketplace/CoreData/ProductData+CoreDataProperties.swift b/Marketplace/CoreData/ProductData+CoreDataProperties.swift index 6cdf25a..b6b20ca 100644 --- a/Marketplace/CoreData/ProductData+CoreDataProperties.swift +++ b/Marketplace/CoreData/ProductData+CoreDataProperties.swift @@ -1,23 +1,23 @@ -// -// ProductData+CoreDataProperties.swift -// Marketplace -// -// Created by Алексей Кобяков on 22.10.2022. -// -// - -import CoreData -import Foundation - -public extension ProductData { - @nonobjc class func fetchRequest() -> NSFetchRequest { - return NSFetchRequest(entityName: "ProductData") - } - - @NSManaged var productImage: Data? - @NSManaged var productTitle: String? - @NSManaged var productPrice: String? - @NSManaged var productDescription: String? -} - -extension ProductData: Identifiable {} +// +// ProductData+CoreDataProperties.swift +// Marketplace +// +// Created by Алексей Кобяков on 22.10.2022. +// +// + +import CoreData +import Foundation + +public extension ProductData { + @nonobjc class func fetchRequest() -> NSFetchRequest { + return NSFetchRequest(entityName: "ProductData") + } + + @NSManaged var productImage: Data? + @NSManaged var productTitle: String? + @NSManaged var productPrice: String? + @NSManaged var productDescription: String? +} + +extension ProductData: Identifiable {} diff --git a/Marketplace/File.swift b/Marketplace/File.swift index 524ba5e..cbb763a 100644 --- a/Marketplace/File.swift +++ b/Marketplace/File.swift @@ -1,15 +1,15 @@ -// -// File.swift -// Marketplace -// -// Created by Алексей Кобяков on 17.06.2024. -// - -import Foundation - -final class MyClass: Sendable { - @Sendable func loadPages() async { - await withTaskGroup(of: Void.self) { _ in - } - } -} +// +// File.swift +// Marketplace +// +// Created by Алексей Кобяков on 17.06.2024. +// + +import Foundation + +final class MyClass: Sendable { + @Sendable func loadPages() async { + await withTaskGroup(of: Void.self) { _ in + } + } +} diff --git a/Marketplace/Marketplace.xcodeproj/project.xcworkspace/xcuserdata/aleksey.xcuserdatad/UserInterfaceState.xcuserstate b/Marketplace/Marketplace.xcodeproj/project.xcworkspace/xcuserdata/aleksey.xcuserdatad/UserInterfaceState.xcuserstate index 032ad00afcb7c21f5eecbf376e4813c98bee968e..f774392e65dd1b6cf65277e2c2ff6359040976ce 100644 GIT binary patch delta 40 vcmaFApX2?0jtwV`SgPFg=Waf0)Y}PUd1P;n+hcHorOLIUa{Htf#@N{agqRX0 delta 40 vcmaFApX2?0jtwV`SX_$()i$3s>g@!wVmEJ&+hcHo#kJ^@ Bool { - // Override point for customization after application launch. - return true - } - - // MARK: UISceneSession Lifecycle - - func application(_: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options _: UIScene.ConnectionOptions) -> UISceneConfiguration { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) - } - - func application(_: UIApplication, didDiscardSceneSessions _: Set) { - // Called when the user discards a scene session. - // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. - // Use this method to release any resources that were specific to the discarded scenes, as they will not return. - } -} +// +// AppDelegate.swift +// Marketplace +// +// Created by Алексей Кобяков on 28.09.2022. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options _: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_: UIApplication, didDiscardSceneSessions _: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } +} diff --git a/Marketplace/Marketplace/Cart/CartProductCell.swift b/Marketplace/Marketplace/Cart/CartProductCell.swift index 94f7c36..e235c9f 100644 --- a/Marketplace/Marketplace/Cart/CartProductCell.swift +++ b/Marketplace/Marketplace/Cart/CartProductCell.swift @@ -1,74 +1,74 @@ -// -// CartProductCell.swift -// Marketplace -// -// Created by Алексей Кобяков on 06.10.2022. -// - -import UIKit - -class CartProductCell: UITableViewCell { - private lazy var image: UIImageView = { - let image = UIImageView(image: UIImage(systemName: "tshirt")) - image.translatesAutoresizingMaskIntoConstraints = false - image.contentMode = .scaleAspectFit - return image - }() - - private lazy var titleLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 20, weight: .medium) - label.textColor = .black - label.textAlignment = .center - label.numberOfLines = 3 - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - private lazy var priceLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 16, weight: .bold) - label.textColor = .black - label.textAlignment = .right - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - - contentView.addSubview(image) - contentView.addSubview(titleLabel) - contentView.addSubview(priceLabel) - - setupConstraints() - } - - @available(*, unavailable) - required init?(coder _: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - private func setupConstraints() { - image.widthAnchor.constraint(equalToConstant: contentView.frame.width / 4).isActive = true - image.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 5).isActive = true - image.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true - image.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true - - priceLabel.widthAnchor.constraint(equalToConstant: contentView.frame.width / 4).isActive = true - priceLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true - priceLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true - priceLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -5).isActive = true - - titleLabel.leadingAnchor.constraint(equalTo: image.trailingAnchor, constant: 10).isActive = true - titleLabel.trailingAnchor.constraint(equalTo: priceLabel.leadingAnchor, constant: -10).isActive = true - titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true - titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true - } - - func configure(_ viewModel: ProductData) { - titleLabel.text = viewModel.productTitle - priceLabel.text = (viewModel.productPrice ?? "") + "$" - image.image = UIImage(data: viewModel.productImage ?? Data()) - } -} +// +// CartProductCell.swift +// Marketplace +// +// Created by Алексей Кобяков on 06.10.2022. +// + +import UIKit + +class CartProductCell: UITableViewCell { + private lazy var image: UIImageView = { + let image = UIImageView(image: UIImage(systemName: "tshirt")) + image.translatesAutoresizingMaskIntoConstraints = false + image.contentMode = .scaleAspectFit + return image + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 20, weight: .medium) + label.textColor = .black + label.textAlignment = .center + label.numberOfLines = 3 + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + private lazy var priceLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 16, weight: .bold) + label.textColor = .black + label.textAlignment = .right + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + contentView.addSubview(image) + contentView.addSubview(titleLabel) + contentView.addSubview(priceLabel) + + setupConstraints() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupConstraints() { + image.widthAnchor.constraint(equalToConstant: contentView.frame.width / 4).isActive = true + image.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 5).isActive = true + image.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true + image.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true + + priceLabel.widthAnchor.constraint(equalToConstant: contentView.frame.width / 4).isActive = true + priceLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true + priceLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true + priceLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -5).isActive = true + + titleLabel.leadingAnchor.constraint(equalTo: image.trailingAnchor, constant: 10).isActive = true + titleLabel.trailingAnchor.constraint(equalTo: priceLabel.leadingAnchor, constant: -10).isActive = true + titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true + titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true + } + + func configure(_ viewModel: ProductData) { + titleLabel.text = viewModel.productTitle + priceLabel.text = (viewModel.productPrice ?? "") + "$" + image.image = UIImage(data: viewModel.productImage ?? Data()) + } +} diff --git a/Marketplace/Marketplace/Cart/CartViewController.swift b/Marketplace/Marketplace/Cart/CartViewController.swift index 286d4ab..c486b27 100644 --- a/Marketplace/Marketplace/Cart/CartViewController.swift +++ b/Marketplace/Marketplace/Cart/CartViewController.swift @@ -1,169 +1,169 @@ -// -// CartViewController.swift -// Marketplace -// -// Created by Алексей Кобяков on 29.09.2022. -// - -import CoreData -import UIKit - -class CartViewController: UIViewController { - private let persistentContainer = NSPersistentContainer(name: "Model") - let cellID: String = "CartProductCell" - var productsInCart: [Product] = [] - - private lazy var tableView: UITableView = { - let tableView = UITableView() - tableView.translatesAutoresizingMaskIntoConstraints = false - tableView.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) - tableView.separatorColor = .systemGray4 - tableView.rowHeight = view.frame.height / 6 - return tableView - }() - - private lazy var fetchedResultController: NSFetchedResultsController = { - let fetchRequest = ProductData.fetchRequest() - let sortDescriptor = NSSortDescriptor(key: "productTitle", ascending: true) - fetchRequest.sortDescriptors = [sortDescriptor] - let fetchResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.persistentContainer.viewContext, sectionNameKeyPath: nil, cacheName: nil) - fetchResultController.delegate = self - return fetchResultController - }() - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - print("viewWillAppear") - tableView.reloadData() - } - - override func viewDidLoad() { - super.viewDidLoad() - view.backgroundColor = .white - - tableView.register(CartProductCell.self, forCellReuseIdentifier: cellID) - tableView.delegate = self - tableView.dataSource = self - view.addSubview(tableView) - setupContstraints() - // print("cart open") - loadContainer() - } - - private func setupContstraints() { - tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true - tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true - tableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50).isActive = true - tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true - } - - func updateTableViewElements(product: Product) { - productsInCart.append(product) - print(productsInCart.count) - // saveCart() - print("Add to cart item") - let productData = ProductData(entity: NSEntityDescription.entity(forEntityName: "ProductData", in: persistentContainer.viewContext)!, insertInto: persistentContainer.viewContext) - productData.productImage = product.productImage.pngData() - productData.productPrice = product.productPrice - productData.productDescription = product.productDescription - productData.productTitle = product.productTitle - try? productData.managedObjectContext?.save() - } - - private func loadContainer() { - persistentContainer.loadPersistentStores { _, error in - if let error = error { - print("Unable to load persistent store") - print("\(error)") - } else { - do { - try self.fetchedResultController.performFetch() - } catch { - print(error) - } - } - } - print("FetchedObj \(fetchedResultController.sections?[0].numberOfObjects ?? 99)") - } -} - -// MARK: - extenstions - -extension CartViewController: UITableViewDelegate { - func tableView(_ tableView: UITableView, viewForHeaderInSection _: Int) -> UIView? { - let label = UILabel() - label.frame = CGRect(x: 15, y: 5, width: tableView.frame.width - 10, height: tableView.frame.height - 10) - label.text = "Cart" - label.font = .systemFont(ofSize: 25, weight: .bold) - label.textColor = .black - return label - } - - func tableView(_: UITableView, heightForHeaderInSection _: Int) -> CGFloat { - 45 - } -} - -extension CartViewController: UITableViewDataSource { - func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { - if let sections = fetchedResultController.sections { - return sections[section].numberOfObjects - } - return 0 - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let productData = fetchedResultController.object(at: indexPath) - let cell = tableView.dequeueReusableCell(withIdentifier: cellID) as? CartProductCell - cell?.configure(productData) - return cell ?? UITableViewCell() - } - - func tableView(_: UITableView, canEditRowAt _: IndexPath) -> Bool { - true - } - - func tableView(_: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { - if editingStyle == .delete { - let productData = fetchedResultController.object(at: indexPath) - persistentContainer.viewContext.delete(productData) - try? persistentContainer.viewContext.save() - } - } -} - -extension CartViewController: NSFetchedResultsControllerDelegate { - func controllerWillChangeContent(_: NSFetchedResultsController) { - tableView.beginUpdates() - } - - func controllerDidChangeContent(_: NSFetchedResultsController) { - tableView.endUpdates() - } - - func controller(_: NSFetchedResultsController, didChange _: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) { - switch type { - case .insert: - if let indexPath = newIndexPath { - tableView.insertRows(at: [indexPath], with: .automatic) - } - case .update: - if let indexPath = indexPath { - print(indexPath) - } - case .move: - if let indexPath = indexPath { - tableView.deleteRows(at: [indexPath], with: .automatic) - } - if let newIndexPath = newIndexPath { - tableView.insertRows(at: [newIndexPath], with: .automatic) - } - case .delete: - if let indexPath = indexPath { - tableView.deleteRows(at: [indexPath], with: .automatic) - } - @unknown default: - fatalError() - } - } -} +// +// CartViewController.swift +// Marketplace +// +// Created by Алексей Кобяков on 29.09.2022. +// + +import CoreData +import UIKit + +class CartViewController: UIViewController { + private let persistentContainer = NSPersistentContainer(name: "Model") + let cellID: String = "CartProductCell" + var productsInCart: [Product] = [] + + private lazy var tableView: UITableView = { + let tableView = UITableView() + tableView.translatesAutoresizingMaskIntoConstraints = false + tableView.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) + tableView.separatorColor = .systemGray4 + tableView.rowHeight = view.frame.height / 6 + return tableView + }() + + private lazy var fetchedResultController: NSFetchedResultsController = { + let fetchRequest = ProductData.fetchRequest() + let sortDescriptor = NSSortDescriptor(key: "productTitle", ascending: true) + fetchRequest.sortDescriptors = [sortDescriptor] + let fetchResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.persistentContainer.viewContext, sectionNameKeyPath: nil, cacheName: nil) + fetchResultController.delegate = self + return fetchResultController + }() + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + print("viewWillAppear") + tableView.reloadData() + } + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .white + + tableView.register(CartProductCell.self, forCellReuseIdentifier: cellID) + tableView.delegate = self + tableView.dataSource = self + view.addSubview(tableView) + setupContstraints() + // print("cart open") + loadContainer() + } + + private func setupContstraints() { + tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true + tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true + tableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50).isActive = true + tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true + } + + func updateTableViewElements(product: Product) { + productsInCart.append(product) + print(productsInCart.count) + // saveCart() + print("Add to cart item") + let productData = ProductData(entity: NSEntityDescription.entity(forEntityName: "ProductData", in: persistentContainer.viewContext)!, insertInto: persistentContainer.viewContext) + productData.productImage = product.productImage.pngData() + productData.productPrice = product.productPrice + productData.productDescription = product.productDescription + productData.productTitle = product.productTitle + try? productData.managedObjectContext?.save() + } + + private func loadContainer() { + persistentContainer.loadPersistentStores { _, error in + if let error = error { + print("Unable to load persistent store") + print("\(error)") + } else { + do { + try self.fetchedResultController.performFetch() + } catch { + print(error) + } + } + } + print("FetchedObj \(fetchedResultController.sections?[0].numberOfObjects ?? 99)") + } +} + +// MARK: - extenstions + +extension CartViewController: UITableViewDelegate { + func tableView(_ tableView: UITableView, viewForHeaderInSection _: Int) -> UIView? { + let label = UILabel() + label.frame = CGRect(x: 15, y: 5, width: tableView.frame.width - 10, height: tableView.frame.height - 10) + label.text = "Cart" + label.font = .systemFont(ofSize: 25, weight: .bold) + label.textColor = .black + return label + } + + func tableView(_: UITableView, heightForHeaderInSection _: Int) -> CGFloat { + 45 + } +} + +extension CartViewController: UITableViewDataSource { + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + if let sections = fetchedResultController.sections { + return sections[section].numberOfObjects + } + return 0 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let productData = fetchedResultController.object(at: indexPath) + let cell = tableView.dequeueReusableCell(withIdentifier: cellID) as? CartProductCell + cell?.configure(productData) + return cell ?? UITableViewCell() + } + + func tableView(_: UITableView, canEditRowAt _: IndexPath) -> Bool { + true + } + + func tableView(_: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + let productData = fetchedResultController.object(at: indexPath) + persistentContainer.viewContext.delete(productData) + try? persistentContainer.viewContext.save() + } + } +} + +extension CartViewController: NSFetchedResultsControllerDelegate { + func controllerWillChangeContent(_: NSFetchedResultsController) { + tableView.beginUpdates() + } + + func controllerDidChangeContent(_: NSFetchedResultsController) { + tableView.endUpdates() + } + + func controller(_: NSFetchedResultsController, didChange _: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) { + switch type { + case .insert: + if let indexPath = newIndexPath { + tableView.insertRows(at: [indexPath], with: .automatic) + } + case .update: + if let indexPath = indexPath { + print(indexPath) + } + case .move: + if let indexPath = indexPath { + tableView.deleteRows(at: [indexPath], with: .automatic) + } + if let newIndexPath = newIndexPath { + tableView.insertRows(at: [newIndexPath], with: .automatic) + } + case .delete: + if let indexPath = indexPath { + tableView.deleteRows(at: [indexPath], with: .automatic) + } + @unknown default: + fatalError() + } + } +} diff --git a/Marketplace/Marketplace/CategoriesScreen/CategoryViewController.swift b/Marketplace/Marketplace/CategoriesScreen/CategoryViewController.swift index 8efc8ff..96a510a 100644 --- a/Marketplace/Marketplace/CategoriesScreen/CategoryViewController.swift +++ b/Marketplace/Marketplace/CategoriesScreen/CategoryViewController.swift @@ -1,100 +1,100 @@ -// -// CategoryViewController.swift -// Marketplace -// -// Created by Алексей Кобяков on 28.09.2022. -// - -import UIKit - -class CategoryViewController: UIViewController { - let categories: [CategoryCell] = [ - CategoryCell( - iconCategory: "👕", - description: "Men's clothes", - jsonRequest: "men's%20clothing" - ), - CategoryCell( - iconCategory: "👚", - description: "Women's clothes", - jsonRequest: "women's%20clothing" - ), - CategoryCell( - iconCategory: "🖥", - description: "Electronics", - jsonRequest: "electronics" - ), - CategoryCell( - iconCategory: "💎", - description: "Jeweliry", - jsonRequest: "jewelery" - ) - ] - - private lazy var collectionView: UICollectionView = { - let layout = UICollectionViewFlowLayout() - layout.scrollDirection = .vertical - layout.minimumLineSpacing = 15 - layout.minimumInteritemSpacing = 5 - layout.itemSize = CGSize( - width: (view.frame.width / 2) + 100, - height: view.frame.height / 6 - ) - - let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) - collectionView.translatesAutoresizingMaskIntoConstraints = false - collectionView.backgroundColor = .white - return collectionView - }() - - override func viewDidLoad() { - super.viewDidLoad() - title = "Categories" - view.backgroundColor = .white - - collectionView.register(CategoriesCell.self, forCellWithReuseIdentifier: "CategoryCell") - collectionView.delegate = self - collectionView.dataSource = self - - view.addSubview(collectionView) - setupView() - } - - private func setupView() { - collectionView.topAnchor.constraint(equalTo: view.topAnchor, constant: 90).isActive = true - collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16).isActive = true - collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16).isActive = true - collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -110).isActive = true - } -} - -// MARK: - Extensions - -extension CategoryViewController: UICollectionViewDelegate { - func collectionView(_: UICollectionView, didSelectItemAt indexPath: IndexPath) { - let viewModel = categories[indexPath.row] - print("Selected: \(viewModel.description)") - - let categoryProductViewController = CategoryProductViewController() - categoryProductViewController.categoryTitle = viewModel.description - categoryProductViewController.productDownload( - urlString: "https://fakestoreapi.com/products/category/\(viewModel.jsonRequest)") - navigationController?.pushViewController( - categoryProductViewController, - animated: true - ) - } -} - -extension CategoryViewController: UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CategoryCell", for: indexPath) as! CategoriesCell - let viewModel = categories[indexPath.row] - cell.configure(viewModel) - return cell - } - - func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int { - categories.count - } -} +// +// CategoryViewController.swift +// Marketplace +// +// Created by Алексей Кобяков on 28.09.2022. +// + +import UIKit + +class CategoryViewController: UIViewController { + let categories: [CategoryCell] = [ + CategoryCell( + iconCategory: "👕", + description: "Men's clothes", + jsonRequest: "men's%20clothing" + ), + CategoryCell( + iconCategory: "👚", + description: "Women's clothes", + jsonRequest: "women's%20clothing" + ), + CategoryCell( + iconCategory: "🖥", + description: "Electronics", + jsonRequest: "electronics" + ), + CategoryCell( + iconCategory: "💎", + description: "Jeweliry", + jsonRequest: "jewelery" + ) + ] + + private lazy var collectionView: UICollectionView = { + let layout = UICollectionViewFlowLayout() + layout.scrollDirection = .vertical + layout.minimumLineSpacing = 15 + layout.minimumInteritemSpacing = 5 + layout.itemSize = CGSize( + width: (view.frame.width / 2) + 100, + height: view.frame.height / 6 + ) + + let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) + collectionView.translatesAutoresizingMaskIntoConstraints = false + collectionView.backgroundColor = .white + return collectionView + }() + + override func viewDidLoad() { + super.viewDidLoad() + title = "Categories" + view.backgroundColor = .white + + collectionView.register(CategoriesCell.self, forCellWithReuseIdentifier: "CategoryCell") + collectionView.delegate = self + collectionView.dataSource = self + + view.addSubview(collectionView) + setupView() + } + + private func setupView() { + collectionView.topAnchor.constraint(equalTo: view.topAnchor, constant: 90).isActive = true + collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16).isActive = true + collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16).isActive = true + collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -110).isActive = true + } +} + +// MARK: - Extensions + +extension CategoryViewController: UICollectionViewDelegate { + func collectionView(_: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let viewModel = categories[indexPath.row] + print("Selected: \(viewModel.description)") + + let categoryProductViewController = CategoryProductViewController() + categoryProductViewController.categoryTitle = viewModel.description + categoryProductViewController.productDownload( + urlString: "https://fakestoreapi.com/products/category/\(viewModel.jsonRequest)") + navigationController?.pushViewController( + categoryProductViewController, + animated: true + ) + } +} + +extension CategoryViewController: UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CategoryCell", for: indexPath) as! CategoriesCell + let viewModel = categories[indexPath.row] + cell.configure(viewModel) + return cell + } + + func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int { + categories.count + } +} diff --git a/Marketplace/Marketplace/CategoriesScreen/CatgoriesCell.swift b/Marketplace/Marketplace/CategoriesScreen/CatgoriesCell.swift index 1689708..a613185 100644 --- a/Marketplace/Marketplace/CategoriesScreen/CatgoriesCell.swift +++ b/Marketplace/Marketplace/CategoriesScreen/CatgoriesCell.swift @@ -1,71 +1,71 @@ -// -// CatgoriesCell.swift -// Marketplace -// -// Created by Алексей Кобяков on 29.09.2022. -// - -import UIKit - -struct CategoryCell { - var iconCategory: String - var description: String - var jsonRequest: String -} - -class CategoriesCell: UICollectionViewCell { - private lazy var iconCategoryLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 50) - label.textColor = .black - label.clipsToBounds = true - label.textAlignment = .center - return label - }() - - private lazy var descriptionCategoryLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 20, weight: .semibold) - label.textColor = .black - label.textAlignment = .center - // translatesAutoresizingMaskIntoConstraints = false - return label - }() - - override init(frame: CGRect) { - super.init(frame: frame) - - contentView.addSubview(iconCategoryLabel) - contentView.addSubview(descriptionCategoryLabel) - backgroundColor = .systemGray6 - - setupView() - } - - private func setupView() { - iconCategoryLabel.frame = CGRect( - x: 0, - y: contentView.frame.size.height - 105, - width: contentView.frame.size.width, - height: 50 - ) - descriptionCategoryLabel.frame = CGRect( - x: 0, - y: contentView.frame.size.height - 60, - width: contentView.frame.size.width, - height: 50 - ) - layer.cornerRadius = 20 - } - - func configure(_ viewModel: CategoryCell) { - iconCategoryLabel.text = viewModel.iconCategory - descriptionCategoryLabel.text = viewModel.description - // print(viewModel.iconCategory) - } - - @available(*, unavailable) - required init?(coder _: NSCoder) { - fatalError("init(coder:) has not be implemented") - } -} +// +// CatgoriesCell.swift +// Marketplace +// +// Created by Алексей Кобяков on 29.09.2022. +// + +import UIKit + +struct CategoryCell { + var iconCategory: String + var description: String + var jsonRequest: String +} + +class CategoriesCell: UICollectionViewCell { + private lazy var iconCategoryLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 50) + label.textColor = .black + label.clipsToBounds = true + label.textAlignment = .center + return label + }() + + private lazy var descriptionCategoryLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 20, weight: .semibold) + label.textColor = .black + label.textAlignment = .center + // translatesAutoresizingMaskIntoConstraints = false + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + + contentView.addSubview(iconCategoryLabel) + contentView.addSubview(descriptionCategoryLabel) + backgroundColor = .systemGray6 + + setupView() + } + + private func setupView() { + iconCategoryLabel.frame = CGRect( + x: 0, + y: contentView.frame.size.height - 105, + width: contentView.frame.size.width, + height: 50 + ) + descriptionCategoryLabel.frame = CGRect( + x: 0, + y: contentView.frame.size.height - 60, + width: contentView.frame.size.width, + height: 50 + ) + layer.cornerRadius = 20 + } + + func configure(_ viewModel: CategoryCell) { + iconCategoryLabel.text = viewModel.iconCategory + descriptionCategoryLabel.text = viewModel.description + // print(viewModel.iconCategory) + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not be implemented") + } +} diff --git a/Marketplace/Marketplace/Keys.swift b/Marketplace/Marketplace/Keys.swift index 915caa9..9987f0b 100644 --- a/Marketplace/Marketplace/Keys.swift +++ b/Marketplace/Marketplace/Keys.swift @@ -1,10 +1,10 @@ -// -// Keys.swift -// Marketplace -// -// Created by Алексей Кобяков on 22.10.2022. -// - -enum Keys { - static let productSaveKey = "productSaveKey" -} +// +// Keys.swift +// Marketplace +// +// Created by Алексей Кобяков on 22.10.2022. +// + +enum Keys { + static let productSaveKey = "productSaveKey" +} diff --git a/Marketplace/Marketplace/ProductScreen/CategoryProductViewController.swift b/Marketplace/Marketplace/ProductScreen/CategoryProductViewController.swift index 5bd306a..2c2de13 100644 --- a/Marketplace/Marketplace/ProductScreen/CategoryProductViewController.swift +++ b/Marketplace/Marketplace/ProductScreen/CategoryProductViewController.swift @@ -1,191 +1,191 @@ -// -// CategoryProductViewController.swift -// Marketplace -// -// Created by Алексей Кобяков on 04.10.2022. -// - -import Foundation -import UIKit - -class CategoryProductViewController: UIViewController { - let cellID: String = "CategoryProduct" - var categoryTitle: String? - var products: [Product] = [] - - private lazy var tableView: UITableView = { - let tableView = UITableView() - tableView.translatesAutoresizingMaskIntoConstraints = false - tableView.allowsSelection = true - tableView.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) - tableView.separatorColor = .systemGray4 - tableView.rowHeight = view.frame.height / 2 - - return tableView - }() - - private lazy var activityIndicator: UIActivityIndicatorView = { - let indicator = UIActivityIndicatorView(frame: CGRect(x: view.frame.width / 2 - 75, y: 40, width: 150, height: 150)) - return indicator - }() - - // MARK: - ViewDidLoad - - override func viewDidLoad() { - super.viewDidLoad() - - title = categoryTitle ?? "No category" - view.backgroundColor = .white - - tableView.register(ProductsCell.self, forCellReuseIdentifier: cellID) - tableView.delegate = self - tableView.dataSource = self - view.addSubview(tableView) - setupContstraints() - } - - private func setupContstraints() { - tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true - tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true - tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true - tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true - } - - func productDownload(urlString: String) { - activityIndicator.startAnimating() - let url = URL(string: urlString) - var request = URLRequest(url: url!) - request.httpMethod = "GET" - request.allHTTPHeaderFields = ["accept": "application/json"] - - let task = URLSession.shared.dataTask( - with: request) - { - data, _, error in - DispatchQueue.global().async { - [weak self] in - guard let self = self else { return } - print("async") - if let error = error { - print(error) - } else { - print("try") - if let data = data, - let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] - { - print("Yes!") - print("Succes") - var index = 0 - for product in json { - self.products.append(Product( - productTitle: "", - productPrice: "", - productDescription: "", - productURLImage: "", - productImage: UIImage() - )) - if let title = product["title"] as? String { - self.products[index].productTitle = title - } - if let description = product["description"] as? String { - self.products[index].productDescription = description - } - if let price = product["price"] as? Double { - self.products[index].productPrice = String(price) - } - if let imageURL = product["image"] as? String { - self.products[index].productURLImage = imageURL - } - index += 1 - } - DispatchQueue.main.async { - self.tableView.reloadData() - self.loadImages() - } - } - } - } - } - task.resume() - } - - private func loadImages() { - let dispatchGroup = DispatchGroup() - view.addSubview(activityIndicator) - for index in 0 ... (products.count - 1) { - dispatchGroup.enter() - - asyncLoadImage( - imageStringURL: products[index].productURLImage, - runQueue: DispatchQueue.global(), - completionQueue: DispatchQueue.main - ) { result, _ in - guard let image = result else { return } - self.products[index].productImage = image - dispatchGroup.leave() - } - } - - dispatchGroup.notify(queue: DispatchQueue.main) { [weak self] in - guard let self = self else { return } - print("notify") - self.activityIndicator.stopAnimating() - self.activityIndicator.removeFromSuperview() - self.tableView.reloadData() - } - } - - private func asyncLoadImage( - imageStringURL: String, - runQueue: DispatchQueue, - completionQueue: DispatchQueue, - completion: @escaping (UIImage?, Error?) -> Void - ) { - runQueue.async { - do { - let image = self.downloadImage(urlString: imageStringURL) - completionQueue.async { completion(image, nil) } - } - } - } - - private func downloadImage(urlString: String) -> UIImage? { - guard - let url = URL(string: urlString), - let data = try? Data(contentsOf: url) - else { - print("Ошибка, не удалось загрузить изображение") - return nil - } - - return UIImage(data: data) - } -} - -// MARK: - TableViewDelegate - -extension CategoryProductViewController: UITableViewDelegate {} - -// MARK: - TableViewDataSource - -extension CategoryProductViewController: UITableViewDataSource { - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: cellID) as? ProductsCell - let viewModel = products[indexPath.row] - cell?.configure(viewModel) - return cell ?? UITableViewCell() - } - - func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int { - products.count - } - - func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { - let productVC = ProductViewController() - productVC.product = products[indexPath.row] - navigationController?.pushViewController( - productVC, - animated: true - ) - } -} +// +// CategoryProductViewController.swift +// Marketplace +// +// Created by Алексей Кобяков on 04.10.2022. +// + +import Foundation +import UIKit + +class CategoryProductViewController: UIViewController { + let cellID: String = "CategoryProduct" + var categoryTitle: String? + var products: [Product] = [] + + private lazy var tableView: UITableView = { + let tableView = UITableView() + tableView.translatesAutoresizingMaskIntoConstraints = false + tableView.allowsSelection = true + tableView.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) + tableView.separatorColor = .systemGray4 + tableView.rowHeight = view.frame.height / 2 + + return tableView + }() + + private lazy var activityIndicator: UIActivityIndicatorView = { + let indicator = UIActivityIndicatorView(frame: CGRect(x: view.frame.width / 2 - 75, y: 40, width: 150, height: 150)) + return indicator + }() + + // MARK: - ViewDidLoad + + override func viewDidLoad() { + super.viewDidLoad() + + title = categoryTitle ?? "No category" + view.backgroundColor = .white + + tableView.register(ProductsCell.self, forCellReuseIdentifier: cellID) + tableView.delegate = self + tableView.dataSource = self + view.addSubview(tableView) + setupContstraints() + } + + private func setupContstraints() { + tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true + tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true + tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true + tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true + } + + func productDownload(urlString: String) { + activityIndicator.startAnimating() + let url = URL(string: urlString) + var request = URLRequest(url: url!) + request.httpMethod = "GET" + request.allHTTPHeaderFields = ["accept": "application/json"] + + let task = URLSession.shared.dataTask( + with: request) + { + data, _, error in + DispatchQueue.global().async { + [weak self] in + guard let self = self else { return } + print("async") + if let error = error { + print(error) + } else { + print("try") + if let data = data, + let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] + { + print("Yes!") + print("Succes") + var index = 0 + for product in json { + self.products.append(Product( + productTitle: "", + productPrice: "", + productDescription: "", + productURLImage: "", + productImage: UIImage() + )) + if let title = product["title"] as? String { + self.products[index].productTitle = title + } + if let description = product["description"] as? String { + self.products[index].productDescription = description + } + if let price = product["price"] as? Double { + self.products[index].productPrice = String(price) + } + if let imageURL = product["image"] as? String { + self.products[index].productURLImage = imageURL + } + index += 1 + } + DispatchQueue.main.async { + self.tableView.reloadData() + self.loadImages() + } + } + } + } + } + task.resume() + } + + private func loadImages() { + let dispatchGroup = DispatchGroup() + view.addSubview(activityIndicator) + for index in 0 ... (products.count - 1) { + dispatchGroup.enter() + + asyncLoadImage( + imageStringURL: products[index].productURLImage, + runQueue: DispatchQueue.global(), + completionQueue: DispatchQueue.main + ) { result, _ in + guard let image = result else { return } + self.products[index].productImage = image + dispatchGroup.leave() + } + } + + dispatchGroup.notify(queue: DispatchQueue.main) { [weak self] in + guard let self = self else { return } + print("notify") + self.activityIndicator.stopAnimating() + self.activityIndicator.removeFromSuperview() + self.tableView.reloadData() + } + } + + private func asyncLoadImage( + imageStringURL: String, + runQueue: DispatchQueue, + completionQueue: DispatchQueue, + completion: @escaping (UIImage?, Error?) -> Void + ) { + runQueue.async { + do { + let image = self.downloadImage(urlString: imageStringURL) + completionQueue.async { completion(image, nil) } + } + } + } + + private func downloadImage(urlString: String) -> UIImage? { + guard + let url = URL(string: urlString), + let data = try? Data(contentsOf: url) + else { + print("Ошибка, не удалось загрузить изображение") + return nil + } + + return UIImage(data: data) + } +} + +// MARK: - TableViewDelegate + +extension CategoryProductViewController: UITableViewDelegate {} + +// MARK: - TableViewDataSource + +extension CategoryProductViewController: UITableViewDataSource { + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: cellID) as? ProductsCell + let viewModel = products[indexPath.row] + cell?.configure(viewModel) + return cell ?? UITableViewCell() + } + + func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int { + products.count + } + + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + let productVC = ProductViewController() + productVC.product = products[indexPath.row] + navigationController?.pushViewController( + productVC, + animated: true + ) + } +} diff --git a/Marketplace/Marketplace/ProductScreen/ProductViewController.swift b/Marketplace/Marketplace/ProductScreen/ProductViewController.swift index 1e7efa3..108d2d2 100644 --- a/Marketplace/Marketplace/ProductScreen/ProductViewController.swift +++ b/Marketplace/Marketplace/ProductScreen/ProductViewController.swift @@ -1,145 +1,145 @@ -// -// ProductViewController.swift -// Marketplace -// -// Created by Алексей Кобяков on 06.10.2022. -// - -import UIKit - -class ProductViewController: UIViewController { - var product: Product? - // let cartVC = CartViewController() - - private lazy var descriptionLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 16, weight: .medium) - label.textColor = .black - label.textAlignment = .justified - label.numberOfLines = 0 - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - private lazy var priceLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 20, weight: .bold) - label.textColor = .black - label.textAlignment = .center - label.numberOfLines = 1 - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - private lazy var image: UIImageView = { - let image = UIImageView(image: UIImage(systemName: "tshirt")) - image.translatesAutoresizingMaskIntoConstraints = false - image.contentMode = .scaleAspectFit - return image - }() - - private lazy var scrollView: UIScrollView = { - let scrollView = UIScrollView() - scrollView.translatesAutoresizingMaskIntoConstraints = false - scrollView.alwaysBounceVertical = true - scrollView.delegate = self - scrollView.showsHorizontalScrollIndicator = false - return scrollView - }() - - private lazy var button: UIButton = { - let button = UIButton() - button.setTitle("Add to Cart", for: .normal) - button.setTitleColor(.black, for: .normal) - button.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .semibold) - button.backgroundColor = .systemCyan - button.addTarget(self, action: #selector(addToCart), for: .touchUpInside) - button.translatesAutoresizingMaskIntoConstraints = false - button.layer.cornerRadius = 12 - return button - }() - - override func viewDidLoad() { - super.viewDidLoad() - - title = product?.productTitle ?? "No" - view.backgroundColor = .white - descriptionLabel.text = product?.productDescription - priceLabel.text = (product?.productPrice ?? "") + "$" - image.image = product?.productImage - - view.addSubview(image) - view.addSubview(scrollView) - view.addSubview(priceLabel) - scrollView.addSubview(descriptionLabel) - view.addSubview(button) - setupConstraints() - } - - @objc private func addToCart() { - // print("Add to cart item") - let vc = tabBarController?.viewControllers?[1] as? CartViewController - vc?.updateTableViewElements(product: product!) - showAddCartAlert() - } - - private func showAddCartAlert() { - let alert = UIAlertController( - title: "Product add!", - message: "Item successfully added to cart!", - preferredStyle: .alert - ) - - alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) - - present(alert, animated: true, completion: nil) - } - - private func setupConstraints() { - // image constraints - image.heightAnchor.constraint(equalToConstant: 300).isActive = true - image.topAnchor.constraint(equalTo: view.topAnchor, constant: 115).isActive = true - // image.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -(view.frame.height/3)).isActive = true - image.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true - image.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true - - // price constraints - priceLabel.heightAnchor.constraint(equalToConstant: 50).isActive = true - priceLabel.topAnchor.constraint(equalTo: image.bottomAnchor, constant: 15).isActive = true - // priceLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true - priceLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true - priceLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true - - // button constraints - button.heightAnchor.constraint(equalToConstant: 50).isActive = true - // button.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: 5).isActive = true - button.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -95).isActive = true - button.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true - button.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true - - // description constraints -// descriptionLabel.topAnchor.constraint(equalTo: priceLabel.bottomAnchor, constant: -5).isActive = true -// descriptionLabel.bottomAnchor.constraint(equalTo: button.topAnchor, constant: -5).isActive = true -// descriptionLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10).isActive = true -// descriptionLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10).isActive = true - scrollView.topAnchor.constraint(equalTo: priceLabel.bottomAnchor, constant: -5).isActive = true - scrollView.bottomAnchor.constraint(equalTo: button.topAnchor, constant: -5).isActive = true - scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10).isActive = true - scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10).isActive = true - descriptionLabel.widthAnchor.constraint(equalToConstant: view.frame.width - 40).isActive = true - descriptionLabel.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor, constant: 5).isActive = true - descriptionLabel.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor, constant: -5).isActive = true - descriptionLabel.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: -1).isActive = true - descriptionLabel.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 1).isActive = true - } -} - -// MARK: - extensions - -extension ProductViewController: UIScrollViewDelegate { - func scrollViewDidScroll(_ scrollView: UIScrollView) { - if scrollView.contentOffset.x != 0 { - scrollView.contentOffset.x = 0 - } - } -} +// +// ProductViewController.swift +// Marketplace +// +// Created by Алексей Кобяков on 06.10.2022. +// + +import UIKit + +class ProductViewController: UIViewController { + var product: Product? + // let cartVC = CartViewController() + + private lazy var descriptionLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 16, weight: .medium) + label.textColor = .black + label.textAlignment = .justified + label.numberOfLines = 0 + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + private lazy var priceLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 20, weight: .bold) + label.textColor = .black + label.textAlignment = .center + label.numberOfLines = 1 + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + private lazy var image: UIImageView = { + let image = UIImageView(image: UIImage(systemName: "tshirt")) + image.translatesAutoresizingMaskIntoConstraints = false + image.contentMode = .scaleAspectFit + return image + }() + + private lazy var scrollView: UIScrollView = { + let scrollView = UIScrollView() + scrollView.translatesAutoresizingMaskIntoConstraints = false + scrollView.alwaysBounceVertical = true + scrollView.delegate = self + scrollView.showsHorizontalScrollIndicator = false + return scrollView + }() + + private lazy var button: UIButton = { + let button = UIButton() + button.setTitle("Add to Cart", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .semibold) + button.backgroundColor = .systemCyan + button.addTarget(self, action: #selector(addToCart), for: .touchUpInside) + button.translatesAutoresizingMaskIntoConstraints = false + button.layer.cornerRadius = 12 + return button + }() + + override func viewDidLoad() { + super.viewDidLoad() + + title = product?.productTitle ?? "No" + view.backgroundColor = .white + descriptionLabel.text = product?.productDescription + priceLabel.text = (product?.productPrice ?? "") + "$" + image.image = product?.productImage + + view.addSubview(image) + view.addSubview(scrollView) + view.addSubview(priceLabel) + scrollView.addSubview(descriptionLabel) + view.addSubview(button) + setupConstraints() + } + + @objc private func addToCart() { + // print("Add to cart item") + let vc = tabBarController?.viewControllers?[1] as? CartViewController + vc?.updateTableViewElements(product: product!) + showAddCartAlert() + } + + private func showAddCartAlert() { + let alert = UIAlertController( + title: "Product add!", + message: "Item successfully added to cart!", + preferredStyle: .alert + ) + + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + + present(alert, animated: true, completion: nil) + } + + private func setupConstraints() { + // image constraints + image.heightAnchor.constraint(equalToConstant: 300).isActive = true + image.topAnchor.constraint(equalTo: view.topAnchor, constant: 115).isActive = true + // image.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -(view.frame.height/3)).isActive = true + image.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true + image.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true + + // price constraints + priceLabel.heightAnchor.constraint(equalToConstant: 50).isActive = true + priceLabel.topAnchor.constraint(equalTo: image.bottomAnchor, constant: 15).isActive = true + // priceLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true + priceLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true + priceLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true + + // button constraints + button.heightAnchor.constraint(equalToConstant: 50).isActive = true + // button.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: 5).isActive = true + button.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -95).isActive = true + button.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true + button.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true + + // description constraints +// descriptionLabel.topAnchor.constraint(equalTo: priceLabel.bottomAnchor, constant: -5).isActive = true +// descriptionLabel.bottomAnchor.constraint(equalTo: button.topAnchor, constant: -5).isActive = true +// descriptionLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10).isActive = true +// descriptionLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10).isActive = true + scrollView.topAnchor.constraint(equalTo: priceLabel.bottomAnchor, constant: -5).isActive = true + scrollView.bottomAnchor.constraint(equalTo: button.topAnchor, constant: -5).isActive = true + scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10).isActive = true + scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10).isActive = true + descriptionLabel.widthAnchor.constraint(equalToConstant: view.frame.width - 40).isActive = true + descriptionLabel.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor, constant: 5).isActive = true + descriptionLabel.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor, constant: -5).isActive = true + descriptionLabel.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: -1).isActive = true + descriptionLabel.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 1).isActive = true + } +} + +// MARK: - extensions + +extension ProductViewController: UIScrollViewDelegate { + func scrollViewDidScroll(_ scrollView: UIScrollView) { + if scrollView.contentOffset.x != 0 { + scrollView.contentOffset.x = 0 + } + } +} diff --git a/Marketplace/Marketplace/ProductScreen/ProductsCell.swift b/Marketplace/Marketplace/ProductScreen/ProductsCell.swift index ede4eaf..492aa1f 100644 --- a/Marketplace/Marketplace/ProductScreen/ProductsCell.swift +++ b/Marketplace/Marketplace/ProductScreen/ProductsCell.swift @@ -1,79 +1,79 @@ -// -// ProductsCell.swift -// Marketplace -// -// Created by Алексей Кобяков on 04.10.2022. -// - -import UIKit - -struct Product { - var productTitle: String - var productPrice: String - var productDescription: String - var productURLImage: String - var productImage: UIImage -} - -class ProductsCell: UITableViewCell { - private lazy var productTitleLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 16, weight: .medium) - label.textColor = .black - label.numberOfLines = 2 - label.textAlignment = .center - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - private lazy var productPriceLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 20, weight: .bold) - label.textColor = .black - label.textAlignment = .center - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - private lazy var productImage: UIImageView = { - let image = UIImageView(image: UIImage(systemName: "tshirt")) - image.contentMode = .scaleAspectFit - return image - }() - - private lazy var stackView: UIStackView = { - let stackView = UIStackView() - stackView.translatesAutoresizingMaskIntoConstraints = false - stackView.axis = .vertical - stackView.spacing = 1 - stackView.contentMode = .scaleToFill - stackView.distribution = .fillEqually - stackView.alignment = .fill - stackView.addArrangedSubview(productTitleLabel) - stackView.addArrangedSubview(productImage) - stackView.addArrangedSubview(productPriceLabel) - return stackView - }() - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - - contentView.addSubview(stackView) - stackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true - stackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true - stackView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -10).isActive = true - stackView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 10).isActive = true - } - - @available(*, unavailable) - required init?(coder _: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - func configure(_ viewModel: Product) { - print(viewModel.productTitle) - productTitleLabel.text = viewModel.productTitle - productPriceLabel.text = viewModel.productPrice + "$" - productImage.image = viewModel.productImage - } -} +// +// ProductsCell.swift +// Marketplace +// +// Created by Алексей Кобяков on 04.10.2022. +// + +import UIKit + +struct Product { + var productTitle: String + var productPrice: String + var productDescription: String + var productURLImage: String + var productImage: UIImage +} + +class ProductsCell: UITableViewCell { + private lazy var productTitleLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 16, weight: .medium) + label.textColor = .black + label.numberOfLines = 2 + label.textAlignment = .center + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + private lazy var productPriceLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 20, weight: .bold) + label.textColor = .black + label.textAlignment = .center + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + private lazy var productImage: UIImageView = { + let image = UIImageView(image: UIImage(systemName: "tshirt")) + image.contentMode = .scaleAspectFit + return image + }() + + private lazy var stackView: UIStackView = { + let stackView = UIStackView() + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.axis = .vertical + stackView.spacing = 1 + stackView.contentMode = .scaleToFill + stackView.distribution = .fillEqually + stackView.alignment = .fill + stackView.addArrangedSubview(productTitleLabel) + stackView.addArrangedSubview(productImage) + stackView.addArrangedSubview(productPriceLabel) + return stackView + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + contentView.addSubview(stackView) + stackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true + stackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true + stackView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -10).isActive = true + stackView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 10).isActive = true + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func configure(_ viewModel: Product) { + print(viewModel.productTitle) + productTitleLabel.text = viewModel.productTitle + productPriceLabel.text = viewModel.productPrice + "$" + productImage.image = viewModel.productImage + } +} diff --git a/Marketplace/Marketplace/SceneDelegate.swift b/Marketplace/Marketplace/SceneDelegate.swift index 417888e..0003923 100644 --- a/Marketplace/Marketplace/SceneDelegate.swift +++ b/Marketplace/Marketplace/SceneDelegate.swift @@ -1,71 +1,71 @@ -// -// SceneDelegate.swift -// Marketplace -// -// Created by Алексей Кобяков on 28.09.2022. -// - -import UIKit - -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - var window: UIWindow? - - func scene(_ scene: UIScene, willConnectTo _: UISceneSession, options _: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let windowScene = (scene as? UIWindowScene) else { return } - let window = UIWindow(windowScene: windowScene) - - let categoryVC = CategoryViewController() - let cartVC = CartViewController() - cartVC.viewDidLoad() - let navigationController = UINavigationController(rootViewController: categoryVC) - - categoryVC.tabBarItem = UITabBarItem( - title: "Categories", - image: UIImage(systemName: "magnifyingglass.circle"), - selectedImage: UIImage(systemName: "magnifyingglass.circle.fill") - ) - cartVC.tabBarItem = UITabBarItem( - title: "Cart", - image: UIImage(systemName: "cart"), - selectedImage: UIImage(systemName: "cart.fill") - ) - - let tabBarController = UITabBarController() - tabBarController.setViewControllers([navigationController, cartVC], animated: true) - - window.rootViewController = tabBarController - self.window = window - window.makeKeyAndVisible() - } - - func sceneDidDisconnect(_: UIScene) { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its session is discarded. - // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). - } - - func sceneDidBecomeActive(_: UIScene) { - // Called when the scene has moved from an inactive state to an active state. - // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. - } - - func sceneWillResignActive(_: UIScene) { - // Called when the scene will move from an active state to an inactive state. - // This may occur due to temporary interruptions (ex. an incoming phone call). - } - - func sceneWillEnterForeground(_: UIScene) { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. - } - - func sceneDidEnterBackground(_: UIScene) { - // Called as the scene transitions from the foreground to the background. - // Use this method to save data, release shared resources, and store enough scene-specific state information - // to restore the scene back to its current state. - } -} +// +// SceneDelegate.swift +// Marketplace +// +// Created by Алексей Кобяков on 28.09.2022. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + var window: UIWindow? + + func scene(_ scene: UIScene, willConnectTo _: UISceneSession, options _: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let windowScene = (scene as? UIWindowScene) else { return } + let window = UIWindow(windowScene: windowScene) + + let categoryVC = CategoryViewController() + let cartVC = CartViewController() + cartVC.viewDidLoad() + let navigationController = UINavigationController(rootViewController: categoryVC) + + categoryVC.tabBarItem = UITabBarItem( + title: "Categories", + image: UIImage(systemName: "magnifyingglass.circle"), + selectedImage: UIImage(systemName: "magnifyingglass.circle.fill") + ) + cartVC.tabBarItem = UITabBarItem( + title: "Cart", + image: UIImage(systemName: "cart"), + selectedImage: UIImage(systemName: "cart.fill") + ) + + let tabBarController = UITabBarController() + tabBarController.setViewControllers([navigationController, cartVC], animated: true) + + window.rootViewController = tabBarController + self.window = window + window.makeKeyAndVisible() + } + + func sceneDidDisconnect(_: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } +} From a6034e478129abb2ab3464707d632693f86faac6 Mon Sep 17 00:00:00 2001 From: AlexOneZ Date: Wed, 26 Mar 2025 16:34:03 +0300 Subject: [PATCH 4/4] some changes --- .../UserInterfaceState.xcuserstate | Bin 139247 -> 139247 bytes README.md | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Marketplace/Marketplace.xcodeproj/project.xcworkspace/xcuserdata/aleksey.xcuserdatad/UserInterfaceState.xcuserstate b/Marketplace/Marketplace.xcodeproj/project.xcworkspace/xcuserdata/aleksey.xcuserdatad/UserInterfaceState.xcuserstate index f774392e65dd1b6cf65277e2c2ff6359040976ce..fdfbd6ac29d87309b39c6b539d1d4218b8db4e55 100644 GIT binary patch delta 40 ucmaFApX2?0jtwV`Snk`+?b&?RsJ9cyT9>jpZjZqUAj@{k_DL;_v9kfIJQMl= delta 40 vcmaFApX2?0jtwV`SgPFg=Waf0)Y}PUd1P;n+hcHorOLIUa{Htf#@N{agqRX0 diff --git a/README.md b/README.md index d090980..6acacc5 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ CategoriesCell - отвечат за ячейку CollectionView CategoryViewCon - UICollectionView 3. Для сохранения корзины использовал CoreData. -''' +``` Brew install swiftformat -''' +```