From f8a063dfce7ea4cc02084425ab5543dcd99509c0 Mon Sep 17 00:00:00 2001 From: Gustavo Ali Date: Thu, 14 Dec 2023 20:04:10 -0600 Subject: [PATCH 1/3] Ejercicio Resuelto v1 --- .DS_Store | Bin 0 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 32928 bytes .../xcschemes/xcschememanagement.plist | 14 +++ SwiftUIBasics/Views/PlansView.swift | 86 +++++++++++++++++- 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 .DS_Store create mode 100644 SwiftUIBasics.xcodeproj/project.xcworkspace/xcuserdata/gustavoali.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 SwiftUIBasics.xcodeproj/xcuserdata/gustavoali.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b1e0cb86317d73fdde9e5a86acd83e2a113da102 GIT binary patch literal 6148 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 z z&U-O$dfv>uMR{xTKFZsjw>R&zywCFv<$aa+P2RD*<9R3ZPUYRoyPHqt<9sHc&lmH% z<{RfL^3C%t^R4qk^7HdYFFn*UP)U*KMlR8Ungq@ccFSb?@+Y{A5W7YZg9yjU=; zU`D}f1&a#W3f?GKQLw7ulY%b`jusp%I9~8m!7l}83(ghXEVxr>RA^mjTj)^eROnjh zUg%XARv1|rT^LgsTNq!MRG3m&S~#X~Ug4&~Lxooh?4a$wmP0II`Ta+IvcPc+t z?oocK{89O{^0e}-@|^O5^0M-(^1AX5KW|i$%soensg; z`9;d2;-UdXHAO><8j6M$X^UElMifmbdZB1a(X^tOMYD_67i}rpQS?#K?xIhN4ip_M zI$ZQ)(a%K}if$DP#a)Vxi%p9yimi)ni#>|Hi+zg&ii3(nio=Q{inEIAiYFH@FWy`H zbMb}ZTP0KpE@4ZIO1hR9mncdcO1w+_N&-uIm4udrmn4?tmMBY#N(PivmQ_3>z?az~%ub2HY)mD2*yjC`~R+E6pe^C@m|kC{>kKm#Rw#l{S}- zC>>oou2d?0wscYHn$kB*HFD7{>Iwe&{m&C)w%MrGZ~ zOv=p4EXu6Qx|i9N1(x+It1FvQwx(=P*}<~oWj~euTz01Hx3Y_6m&>k{Q{~;t73JpT zR^>M3w&fn>A?12$UnrkaKCOIa`JD2X%jcJ` zD}S?mWBEJf@0Nd1zP0?r@*U;7%6FIVDgU{Gsqm~wuc)thsp7qguPd%snpfIa_Na8J zbgT5M46BT&jH>Ki8B-ZsnN^unnO~`_EUp|-IkIwM<&?^)l`|?|s(iU}e&vG7Rh4Th z->=+OxxMnE$~~3)D)(1@UU|IoT;+wz%avCvZ&d!N;#HO^7ge|_O4Uadt4dHMtI|}N zs(z|GRiUa@Ri|oD4O3}V!&ReHV^zfg$y`Y+{TB+KpI;Of%#a7u?xm870>S)!es>@Y3tL{`&)pRviZBlJkZCPzoZCCA39af!NU01!R`i<%})$6L? zt=?9>qk32MC)Inak5qqO{X_Ln)xT8#R(+}ZO7->XKWdz7`qhl7nNah5&77K7YhJHe zT(hKRRn6L(4K*8U-l^GA^Ks4o!QTx&G5E~j>x1uT7>%jMQRA#}(|BmSHGY~vO&?9H zCSH@IN!6rlGBw%oW}11LotpESYnr>Ye63M!P;FFgpW42)akbgCxwZMV%G%=E0kt)? zgK9OkLu#9ATWUwtO0{!q=hePi`&#Xy+Sb~owaaT))vm4GQ2SQxhqXIuKdRk5#BWH{ mklsULhQtkdXUNVWyN2u@vR6ML4KD!E{WEgY|2BNqMf`vD8EIw! literal 0 HcmV?d00001 diff --git a/SwiftUIBasics.xcodeproj/xcuserdata/gustavoali.xcuserdatad/xcschemes/xcschememanagement.plist b/SwiftUIBasics.xcodeproj/xcuserdata/gustavoali.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..27cd9e4 --- /dev/null +++ b/SwiftUIBasics.xcodeproj/xcuserdata/gustavoali.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + SwiftUIBasics.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/SwiftUIBasics/Views/PlansView.swift b/SwiftUIBasics/Views/PlansView.swift index cb97876..14b97bc 100644 --- a/SwiftUIBasics/Views/PlansView.swift +++ b/SwiftUIBasics/Views/PlansView.swift @@ -7,12 +7,92 @@ import SwiftUI -struct PlansView: View { +struct ContentView2: View { var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + VStack(alignment:.center){ + Text("Choose") + .font(.system(size: 32, weight: .black, design: .serif)) + .fontDesign(.rounded) + Text("Your Plan") + .font(.system(size: 32, weight: .black, design: .serif)) + .fontDesign(.rounded) + HStack { + CardView(iconName: "", title: "Basic", description: "Per month", price: "$9") + .foregroundStyle(.white) + .background(.purple) + .cornerRadius(6.0) + ZStack { + CardView(iconName: "", title: "Pro", description: "Per month", price: "$19") + .background(.gray) + .cornerRadius(6.0) + BadgeView(text: "Best for designer", padding: 5) + .foregroundStyle(.white) + .background(.orange) + .padding(.top, 200) + } + } + VStack { + CardView(iconName: "sparkles", title: "Team", description: " Per month ", price: "299") + .background(.black) + .foregroundStyle(.white) + .cornerRadius(6.0) + BadgeView(text: "Perfect for teams with 20 memebers", padding: 5) + .foregroundStyle(.white) + .background(.orange) + .padding(.top, -30) + + } + } + + } } + #Preview { - PlansView() + ContentView2() +} + +struct CardView: View { + var iconName: String + var title: String + var description: String + var price: String + + var body: some View { + VStack(spacing: 10) { + Image(systemName: iconName) + .font(.system(size: 40)) + .padding(.top, 30) + .padding(.bottom, -15) + VStack(spacing: 10) { + Text(title) + .font(.system(.title, design: .rounded)) + .fontWeight(.black) + .padding(.horizontal) + .padding(.vertical) + .padding(.bottom, -25) + Text(price) + .fontWeight(.bold) + .font(.system(size: 40, design: .rounded)) + Text(description) + .padding(.horizontal,40) + .padding(.vertical) + .padding(.bottom) + } + } + } + +} + +struct BadgeView: View { + var text: String + var padding: CGFloat + + + var body: some View { + Text(text) + .padding(padding) + + } } From 923484af94407e8eec97b53f78123b9f9666db31 Mon Sep 17 00:00:00 2001 From: Gustavo Ali Date: Fri, 12 Jan 2024 18:34:30 -0600 Subject: [PATCH 2/3] Ejercicio Resuelto --- .DS_Store | Bin 6148 -> 6148 bytes SwiftUIBasics.xcodeproj/project.pbxproj | 4 + .../UserInterfaceState.xcuserstate | Bin 32928 -> 34061 bytes SwiftUIBasics/SwiftUIBasicsApp.swift | 2 +- SwiftUIBasics/Views/CatsView.swift | 22 ++++++ SwiftUIBasics/Views/Components/CatsView.swift | 8 ++ SwiftUIBasics/Views/SignUpView.swift | 69 +++++++++++++++--- 7 files changed, 94 insertions(+), 11 deletions(-) create mode 100644 SwiftUIBasics/Views/CatsView.swift create mode 100644 SwiftUIBasics/Views/Components/CatsView.swift diff --git a/.DS_Store b/.DS_Store index b1e0cb86317d73fdde9e5a86acd83e2a113da102..a9e7eb99a6fc281a3e59503f6307f3a87032fdd8 100644 GIT binary patch delta 14 VcmZoMXffE}%fzU;*^gKfZS0s>A^ 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 z z&U-O$dfv>uMR{xTKFZsjw>R&zywCFv<$aa+P2RD*<9R3ZPUYRoyPHqt<9sHc&lmH% z<{RfL^3C%t^R4qk^7HdYFFn*UP)U*KMlR8Ungq@ccFSb?@+Y{A5W7YZg9yjU=; zU`D}f1&a#W3f?GKQLw7ulY%b`jusp%I9~8m!7l}83(ghXEVxr>RA^mjTj)^eROnjh zUg%XARv1|rT^LgsTNq!MRG3m&S~#X~Ug4&~Lxooh?4a$wmP0II`Ta+IvcPc+t z?oocK{89O{^0e}-@|^O5^0M-(^1AX5KW|i$%soensg; z`9;d2;-UdXHAO><8j6M$X^UElMifmbdZB1a(X^tOMYD_67i}rpQS?#K?xIhN4ip_M zI$ZQ)(a%K}if$DP#a)Vxi%p9yimi)ni#>|Hi+zg&ii3(nio=Q{inEIAiYFH@FWy`H zbMb}ZTP0KpE@4ZIO1hR9mncdcO1w+_N&-uIm4udrmn4?tmMBY#N(PivmQ_3>z?az~%ub2HY)mD2*yjC`~R+E6pe^C@m|kC{>kKm#Rw#l{S}- zC>>oou2d?0wscYHn$kB*HFD7{>Iwe&{m&C)w%MrGZ~ zOv=p4EXu6Qx|i9N1(x+It1FvQwx(=P*}<~oWj~euTz01Hx3Y_6m&>k{Q{~;t73JpT zR^>M3w&fn>A?12$UnrkaKCOIa`JD2X%jcJ` zD}S?mWBEJf@0Nd1zP0?r@*U;7%6FIVDgU{Gsqm~wuc)thsp7qguPd%snpfIa_Na8J zbgT5M46BT&jH>Ki8B-ZsnN^unnO~`_EUp|-IkIwM<&?^)l`|?|s(iU}e&vG7Rh4Th z->=+OxxMnE$~~3)D)(1@UU|IoT;+wz%avCvZ&d!N;#HO^7ge|_O4Uadt4dHMtI|}N zs(z|GRiUa@Ri|oD4O3}V!&ReHV^zfg$y`Y+{TB+KpI;Of%#a7u?xm870>S)!es>@Y3tL{`&)pRviZBlJkZCPzoZCCA39af!NU01!R`i<%})$6L? zt=?9>qk32MC)Inak5qqO{X_Ln)xT8#R(+}ZO7->XKWdz7`qhl7nNah5&77K7YhJHe zT(hKRRn6L(4K*8U-l^GA^Ks4o!QTx&G5E~j>x1uT7>%jMQRA#}(|BmSHGY~vO&?9H zCSH@IN!6rlGBw%oW}11LotpESYnr>Ye63M!P;FFgpW42)akbgCxwZMV%G%=E0kt)? zgK9OkLu#9ATWUwtO0{!q=hePi`&#Xy+Sb~owaaT))vm4GQ2SQxhqXIuKdRk5#BWH{ mklsULhQtkdXUNVWyN2u@vR6ML4KD!E{WEgY|2BNqMf`vD8EIw! diff --git a/SwiftUIBasics/SwiftUIBasicsApp.swift b/SwiftUIBasics/SwiftUIBasicsApp.swift index 194f2b3..35bd39f 100644 --- a/SwiftUIBasics/SwiftUIBasicsApp.swift +++ b/SwiftUIBasics/SwiftUIBasicsApp.swift @@ -11,7 +11,7 @@ import SwiftUI struct SwiftUIBasicsApp: App { var body: some Scene { WindowGroup { - ContentView() + SignUpView() } } } diff --git a/SwiftUIBasics/Views/CatsView.swift b/SwiftUIBasics/Views/CatsView.swift new file mode 100644 index 0000000..2ddcd96 --- /dev/null +++ b/SwiftUIBasics/Views/CatsView.swift @@ -0,0 +1,22 @@ +// +// CatsView.swift +// SwiftUIBasics +// +// Created by Gustavo Ali Gómez Trejo on 15/12/23. +// + +import SwiftUI + +struct CatsView: View { + var body: some View { + List { + ForEach((1..<20)){ _ in + + } + } + } +} + +#Preview { + CatsView() +} diff --git a/SwiftUIBasics/Views/Components/CatsView.swift b/SwiftUIBasics/Views/Components/CatsView.swift new file mode 100644 index 0000000..f8c7a0e --- /dev/null +++ b/SwiftUIBasics/Views/Components/CatsView.swift @@ -0,0 +1,8 @@ +// +// CatsView.swift +// SwiftUIBasics +// +// Created by Gustavo Ali Gómez Trejo on 15/12/23. +// + +import Foundation diff --git a/SwiftUIBasics/Views/SignUpView.swift b/SwiftUIBasics/Views/SignUpView.swift index 6cef5d9..c507f13 100644 --- a/SwiftUIBasics/Views/SignUpView.swift +++ b/SwiftUIBasics/Views/SignUpView.swift @@ -10,26 +10,34 @@ import Combine class SignUpViewModel: ObservableObject { // inputs - @Published var username: String = "" + @Published var email: String = "" @Published var password: String = "" @Published var passwordConfirm: String = "" // outputs - @Published var isValidUsernameLength: Bool = false + @Published var isValidEmailLength: Bool = false @Published var isValidPasswordLength: Bool = false @Published var isValidPasswordUpperCase: Bool = false + @Published var isValidPasswordLowerCase: Bool = false + @Published var isValidPasswordSymbol: Bool = false + @Published var isValidPasswordNumber: Bool = false @Published var isValidPasswordMatch: Bool = false @Published var isValid: Bool = false private var cancelableSet: Set = [] init() { - $username + $email .receive(on: RunLoop.main) - .map { username in - return username.count >= 4 + .map { email in + let pattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}" + if let _ = email.range(of: pattern, options: .regularExpression) { + return true + } else { + return false + } } - .assign(to: \.isValidUsernameLength, on: self) + .assign(to: \.isValidEmailLength, on: self) .store(in: &cancelableSet) $password @@ -52,7 +60,43 @@ class SignUpViewModel: ObservableObject { } .assign(to: \.isValidPasswordUpperCase, on: self) .store(in: &cancelableSet) - + $password + .receive(on: RunLoop.main) + .map { password in + let pattern = "[a-z]" + if let _ = password.range(of: pattern, options: .regularExpression) { + return true + } else { + return false + } + } + .assign(to: \.isValidPasswordLowerCase, on: self) + .store(in: &cancelableSet) + $password + .receive(on: RunLoop.main) + .map { password in + let pattern = "[0-9]" + if let _ = password.range(of: pattern, options: .regularExpression) { + return true + } else { + return false + } + } + .assign(to: \.isValidPasswordNumber, on: self) + .store(in: &cancelableSet) + $password + .receive(on: RunLoop.main) + .map { password in + let pattern = "[!\"#$%&'()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~]+" + if let _ = password.range(of: pattern, options: .regularExpression) { + return true + } else { + return false + } + } + .assign(to: \.isValidPasswordSymbol, on: self) + .store(in: &cancelableSet) + Publishers.CombineLatest($password, $passwordConfirm) .receive(on: RunLoop.main) .map { (password, passwordConfirm) in @@ -61,7 +105,7 @@ class SignUpViewModel: ObservableObject { .assign(to: \.isValidPasswordMatch, on: self) .store(in: &cancelableSet) - Publishers.CombineLatest4($isValidUsernameLength, $isValidPasswordLength, $isValidPasswordUpperCase, $isValidPasswordMatch) + Publishers.CombineLatest4($isValidEmailLength, $isValidPasswordLength, $isValidPasswordUpperCase, $isValidPasswordMatch) .map { (a, b, c, d) in return a && b && c && d } @@ -80,13 +124,18 @@ struct SignUpView: View { .bold() .foregroundStyle(.maryBlue) .padding(.bottom, 30) - FormTextField(name: "Username", value: $vm.username) - RequirementText(text: "A minimum of 4 characters", isValid: vm.isValidUsernameLength) + FormTextField(name: "Email", value: $vm.email) + .keyboardType(.emailAddress) + .autocapitalization(.none) + RequirementText(text: "Enter a valid Email.", isValid: vm.isValidEmailLength) .padding() FormTextField(name: "Password", value: $vm.password, isSecure: true) VStack { RequirementText(text: "A minimum of 8 characters", isValid: vm.isValidPasswordLength) RequirementText(text: "One uppercase letter", isValid: vm.isValidPasswordUpperCase) + RequirementText(text: "One lowercase letter", isValid: vm.isValidPasswordLowerCase) + RequirementText(text: "One symbol", isValid: vm.isValidPasswordSymbol) + RequirementText(text: "One number", isValid: vm.isValidPasswordNumber) } .padding() FormTextField(name: "Confirm Password", value: $vm.passwordConfirm, isSecure: true) From def37faf12b1ec73796a0444efcbc5e0b8bd4067 Mon Sep 17 00:00:00 2001 From: Gustavo Ali Date: Fri, 12 Jan 2024 19:43:58 -0600 Subject: [PATCH 3/3] Ejercicio Resuelto corregido --- .../UserInterfaceState.xcuserstate | Bin 34061 -> 34061 bytes SwiftUIBasics/Views/SignUpView.swift | 11 ++++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/SwiftUIBasics.xcodeproj/project.xcworkspace/xcuserdata/gustavoali.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftUIBasics.xcodeproj/project.xcworkspace/xcuserdata/gustavoali.xcuserdatad/UserInterfaceState.xcuserstate index 68b49e4cea834e97e70fc069ddf1ca8bdb7fe5c2..c070f3b1b6f409da87b11c478c8f86eac328b3a1 100644 GIT binary patch delta 121 zcmeC}V(RT;+91x$DyZoh_iD2Y?|U)k5`n16d@AXz(l?YHR5n+s1TiwEZ9c1-ugu9L z!`9WXvXSxU`?Wc0`v5Ml^n$Y)4lNMxvFPymu8K+>GSiot}z XXtQ{3vH-i2r>m!zr|;&*+8%ZQz*-`? delta 131 zcmeC}V(RT;+91x$%JE^JsMKZ|-uGh6kpc>n`Bc(br7DyiL^fBc1TivtZ$7Jgna_v$?UhhaCW-fG4j2 diff --git a/SwiftUIBasics/Views/SignUpView.swift b/SwiftUIBasics/Views/SignUpView.swift index c507f13..b04c47b 100644 --- a/SwiftUIBasics/Views/SignUpView.swift +++ b/SwiftUIBasics/Views/SignUpView.swift @@ -23,6 +23,8 @@ class SignUpViewModel: ObservableObject { @Published var isValidPasswordNumber: Bool = false @Published var isValidPasswordMatch: Bool = false @Published var isValid: Bool = false + @Published var isValidPre: Bool = false + private var cancelableSet: Set = [] @@ -104,8 +106,15 @@ class SignUpViewModel: ObservableObject { } .assign(to: \.isValidPasswordMatch, on: self) .store(in: &cancelableSet) + + Publishers.CombineLatest4($isValidPasswordNumber, $isValidPasswordSymbol, $isValidPasswordLowerCase, $isValidPasswordUpperCase) + .map { (a, b, c, d) in + return a && b && c && d + } + .assign(to: \.isValidPre, on: self) + .store(in: &cancelableSet) - Publishers.CombineLatest4($isValidEmailLength, $isValidPasswordLength, $isValidPasswordUpperCase, $isValidPasswordMatch) + Publishers.CombineLatest4($isValidEmailLength, $isValidPasswordLength, $isValidPre, $isValidPasswordMatch) .map { (a, b, c, d) in return a && b && c && d }