소스코드
struct BasicView: View {
@ObservedObject var num = NumberOnly()
@State private var score:Int = 0
@State private var input:Int = 0
@State private var msg:String = "메세지왔다"
@State private var result:String = "Hello, world"
let carStack = HStack{
Text("Car Image")
.font(.headline)
.foregroundColor(.red)
Image(systemName: "car.fill")
}
var body: some View {
VStack{
carStack
Image(systemName: "square.and.arrow.up")
.resizable()
.aspectRatio(contentMode: .fit)
.imageScale(.large)
.foregroundStyle(.tint)
Text("\(msg)")
.foregroundColor(Color.white)
.padding()
.border(Color.white)
.modifier(StandardTitle())
HStack{
TextField("Score", value: $score, format: .number).textFieldStyle(RoundedBorderTextFieldStyle())
.keyboardType(.decimalPad)
TextField("Number", text: $num.value)
.textContentType(.creditCardNumber)
.textFieldStyle(RoundedBorderTextFieldStyle())
.keyboardType(.decimalPad)
}
HStack{
TextField("A숫자", value: $input, format: .number).textFieldStyle(RoundedBorderTextFieldStyle())
Button("누르면 변함", action: btnPressed).foregroundColor(.black) .frame(width: 100, height: 30).border(Color.white)
}
Text("\(result)")
.foregroundColor(Color.white)
.padding()
.border(Color.white)
VStack{
MyHStackView()
}
MyVStack{
Text("Hello")
Text("World")
}
Label("Welcome", systemImage: "person.circle")
.font(.largeTitle)
}
.padding(100)
.background(Color.indigo)
}
func btnPressed(){
result = "Hello222222"
}
}
struct MyHStackView: View {
var body: some View{
HStack{
Text("Text 3")
Text("Text 4")
}
}
}
struct StandardTitle: ViewModifier{
func body(content: Content) -> some View {
content
.font(.largeTitle)
.background(Color.gray)
.border(Color.black, width: 0.2)
.shadow(color: .black, radius: 5, x: 0, y: 5)
}
}
struct MyVStack<Content: View>: View {
let content: () -> Content
init(@ViewBuilder content: @escaping() -> Content){
self.content = content
}
var body: some View{
VStack(spacing:10){
content()
}
}
}
class NumberOnly: ObservableObject {
@Published var value = "" {
didSet{
let fillered = value.filter{$0.isNumber}
if value != fillered{
value = fillered
}
}
}
}
#Preview {
BasicView()
}
결과
