Post

Replies

Boosts

Views

Activity

Reply to Too Complex To Check Code in Reasonable Time?
Looks like there is quite a bit of repetitive code, I'd extract it to subviews / shared components and in general try keeping views more lightweight.  ilionic, thank you. If I run code with just one horizontal stack like var body: some View { 	 VStack(spacing: 0.0) { 			HStack(spacing: 0.0) { 				 ForEach((0...6), id: \.self) { 						index in 						Button(buttonTitles[index] ?? "") { 							 eventPresented = true 							 selectedEventIndex = index + 1 - self.weekIndex 						} 						.foregroundColor(titleColors[index]) 						.overlay(Text(eventNumbers[index] ?? "").font(.footnote).foregroundColor(.blue).offset(x: -16, y: -16)) 						.buttonStyle(BorderlessButtonStyle()) 						.frame(width: 48, height: 48, alignment: .center) 						.background(RoundedRectangle(cornerRadius: 2) 						.fill(fillColors[index]) 						.shadow(color: shadowColors[index], radius: 2, x: 0, y: 0) 						) 						.sheet(isPresented: $eventPresented) { 							 EventView(eventVisible: self.$eventPresented, dayFromParent: self.$selectedEventIndex, monthFromParent: 11) 						} 				 } 			} 			.frame(width: 336.0, height: 48.0, alignment: .leading) 	 } } , the compiler won't do it. Could you suggest to me how I could improve it? Thank you.
Dec ’20
Reply to Too Complex To Check Code in Reasonable Time?
That unable to type-check may occur when there is some primitive errors in such declarations. OOPer, thank you. With all due respect, the code will run without the third parameter. The variables are set up as follows. weekIndex = 2 for _ in 0..<2 { &#9; buttonTitles.append("") &#9; fillColors.append(Color.clear) &#9; shadowColors.append(Color.clear) &#9; titleColors.append(Color.clear) } for i in 0..<38 - 2 { &#9; if i < numberOfDays { &#9;&#9;&#9;buttonTitles.append(String(i + 1)) &#9;&#9;&#9;if let day = myDay { &#9;&#9;&#9;&#9; if i + 1 == day { &#9;&#9;&#9;&#9;&#9;&#9;fillColors.append(Color.green) &#9;&#9;&#9;&#9;&#9;&#9;titleColors.append(Color.white) &#9;&#9;&#9;&#9;&#9;&#9;} else { &#9;&#9;&#9;&#9;&#9;&#9;fillColors.append(Color.white) &#9;&#9;&#9;&#9;&#9;&#9;titleColors.append(Color.black) &#9;&#9;&#9;&#9; } &#9;&#9;&#9;&#9; } else { &#9;&#9;&#9;&#9; fillColors.append(Color.white) &#9;&#9;&#9;&#9; titleColors.append(Color.black) &#9;&#9;&#9;} &#9;&#9;&#9;shadowColors.append(Color.black.opacity(0.4)) &#9;&#9;&#9;} else { &#9;&#9;&#9;buttonTitles.append("") &#9;&#9;&#9;fillColors.append(Color.clear) &#9;&#9;&#9;shadowColors.append(Color.clear) &#9;&#9;&#9;titleColors.append(Color.clear) &#9; } } If I run code with just one horizontal stack var body: some View { &#9; VStack(spacing: 0.0) { &#9;&#9;&#9;HStack(spacing: 0.0) { &#9;&#9;&#9;&#9; ForEach((0...6), id: \.self) { &#9;&#9;&#9;&#9;&#9;&#9;index in &#9;&#9;&#9;&#9;&#9;&#9;Button(buttonTitles[index] ?? "") { &#9;&#9;&#9;&#9;&#9;&#9;&#9; eventPresented = true &#9;&#9;&#9;&#9;&#9;&#9;&#9; selectedEventIndex = index + 1 - self.weekIndex &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;.foregroundColor(titleColors[index]) &#9;&#9;&#9;&#9;&#9;&#9;.overlay(Text(eventNumbers[index] ?? "").font(.footnote).foregroundColor(.blue).offset(x: -16, y: -16)) &#9;&#9;&#9;&#9;&#9;&#9;.buttonStyle(BorderlessButtonStyle()) &#9;&#9;&#9;&#9;&#9;&#9;.frame(width: 48, height: 48, alignment: .center) &#9;&#9;&#9;&#9;&#9;&#9;.background(RoundedRectangle(cornerRadius: 2) &#9;&#9;&#9;&#9;&#9;&#9;.fill(fillColors[index]) &#9;&#9;&#9;&#9;&#9;&#9;.shadow(color: shadowColors[index], radius: 2, x: 0, y: 0) &#9;&#9;&#9;&#9;&#9;&#9;) &#9;&#9;&#9;&#9;&#9;&#9;.sheet(isPresented: $eventPresented) { &#9;&#9;&#9;&#9;&#9;&#9;&#9; EventView(eventVisible: self.$eventPresented, dayFromParent: self.$selectedEventIndex, monthFromParent: 11) &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9; } &#9;&#9;&#9;} &#9;&#9;&#9;.frame(width: 336.0, height: 48.0, alignment: .leading) &#9; } } , the compiler won't do it.
Dec ’20
Reply to Calling a Function to Set Up Body
Do I have to call it with onAppear like the following? import SwiftUI struct ContentView: View { &#9;&#9;@State private var eventPresented = false &#9;&#9;@State var fillColors: [Color] = Array(repeating: Color.white, count: 38) &#9;&#9;@State var buttonTitles: [String?] = Array(repeating: nil, count: 38) &#9;&#9; &#9;&#9;var body: some View { &#9;&#9;&#9;&#9;VStack { &#9;&#9;&#9;&#9;&#9;&#9;ZStack() { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;}.onAppear { makeButtons() } &#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;/* cal buttons */ &#9;&#9;&#9;&#9;&#9;&#9;VStack(spacing: 0.0) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;HStack(spacing: 0.0) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;ForEach((0...6), id: \.self) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Button(buttonTitles[$0] ?? "") { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;eventPresented = true &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.buttonStyle(BorderlessButtonStyle()) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.frame(width: 48, height: 48, alignment: .center) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.background(RoundedRectangle(cornerRadius: 2) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.fill(fillColors[$0]) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.shadow(color: Color.black.opacity(0.4), radius: 2, x: 0, y: 0) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;... &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;... &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;... &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;HStack(alignment: .top, spacing: 0.0) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;ForEach((35...36), id: \.self) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Button(buttonTitles[$0] ?? "") { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.buttonStyle(BorderlessButtonStyle()) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.frame(width: 48, height: 48, alignment: .center) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.background(RoundedRectangle(cornerRadius: 2) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.fill(fillColors[$0]) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.shadow(color: Color.black.opacity(0.4), radius: 2, x: 0, y: 0) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.frame(width: 336.0, height: 48.0, alignment: .leading) &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;}.frame(minWidth: 370, idealWidth: 370, maxWidth: 370, minHeight: 420, idealHeight: 420, maxHeight: 420, alignment: .top) &#9;&#9;} &#9;&#9; &#9;&#9;func makeButtons() { &#9;&#9;&#9;&#9;buttonTitles.removeAll() &#9;&#9;&#9;&#9;for i in 0..<38 { &#9;&#9;&#9;&#9;&#9;&#9;buttonTitles.append(String(i + 1)) &#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;fillColors.removeAll() &#9;&#9;&#9;&#9;for _ in 0..<2 { &#9;&#9;&#9;&#9;&#9;&#9;fillColors.append(Color.clear) &#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;for _ in 0..<36 { &#9;&#9;&#9;&#9;&#9;&#9;fillColors.append(Color.white) &#9;&#9;&#9;&#9;} &#9;&#9;} }
Dec ’20
Reply to Adding a Small Number to Each Button
Interestingly, there is a function called overlay. Button("1") { &#9;&#9; } .overlay(Text("4").font(.footnote).foregroundColor(.blue).offset(x: -16, y: -16)) .buttonStyle(BorderlessButtonStyle()) .frame(width: 48, height: 48, alignment: .center) .background( &#9;&#9;RoundedRectangle(cornerRadius: 2) &#9;&#9;&#9;&#9;.fill(Color.white) &#9;&#9;&#9;&#9;.shadow(color: Color.black.opacity(0.4), radius: 2, x: 0, y: 0) )
Dec ’20
Reply to Adding a Small Number to Each Button
Thank you, OOPer. The concern that I had with Text is that the string won't be necessarily placed inside the corresponding button. If I use your code, a small number will appear to the left of the corresponding button, not inside the corresponding button. I'm sorry if I failed to explain my needs initially.
Dec ’20