From 55352e5a8208f064e3e2d4a28b49a61d20e5f269 Mon Sep 17 00:00:00 2001 From: halfmoon-mind <5338095@gmail.com> Date: Fri, 22 Mar 2024 11:37:47 +0900 Subject: [PATCH] =?UTF-8?q?[#268]=20CodeViewer=EC=9D=98=20=EC=98=88?= =?UTF-8?q?=EC=A0=9C=20=EC=BD=94=EB=93=9C=EB=A1=9C=20ProfileImageView?= =?UTF-8?q?=EC=9D=98=20code=20=EC=98=81=EC=97=AD=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftUI/Atom/ProfileImagePageView.swift | 71 ++++++++++++++----- 1 file changed, 53 insertions(+), 18 deletions(-) diff --git a/YDS-Storybook/SwiftUI/Atom/ProfileImagePageView.swift b/YDS-Storybook/SwiftUI/Atom/ProfileImagePageView.swift index 08491b64..985b31ad 100644 --- a/YDS-Storybook/SwiftUI/Atom/ProfileImagePageView.swift +++ b/YDS-Storybook/SwiftUI/Atom/ProfileImagePageView.swift @@ -4,7 +4,7 @@ // // Created by 심상현 on 2023/09/04. // -// +// import SwiftUI import YDS_SwiftUI @@ -15,27 +15,62 @@ struct ProfileImagePageView: View { @State var imageSelectedIndex: Int = 0 @State var sizeSelectedIndex: Int = 4 @State var image: SwiftUIImage? = YDSSwiftUIImage.images[0] + @State var code: String = "" var body: some View { - StorybookPageView(sample: { - VStack { - image?.image.map { - YDSProfileImageView( - image: $0, - size: YDSProfileImageView.ProfileImageViewSize.allCases[sizeSelectedIndex]) + let contentView = StorybookPageView( + sample: { + VStack { + image?.image.map { + YDSProfileImageView( + image: $0, + size: YDSProfileImageView.ProfileImageViewSize.allCases[sizeSelectedIndex]) + } } - } - }, options: [ - Option.optionalImage( - description: "image", - images: YDSSwiftUIImage.images, - selectedImage: $image), - Option.enum( - description: "size", - cases: YDSProfileImageView.ProfileImageViewSize.allCases, - selectedIndex: $sizeSelectedIndex) - ]) + }, options: [ + Option.optionalImage( + description: "image", + images: YDSSwiftUIImage.images, + selectedImage: $image), + Option.enum( + description: "size", + cases: YDSProfileImageView.ProfileImageViewSize.allCases, + selectedIndex: $sizeSelectedIndex) + ], + code: $code + ) .navigationTitle(title) + .onAppear { + updateCodeText() + } + + // onChange 관련 함수가 iOS 17.0부터 deprecated 되어 분기 + if #available(iOS 17.0, *) { + contentView + .onChange(of: image) { _ in updateCodeText() } + .onChange(of: sizeSelectedIndex) { _ in updateCodeText() } + } else { + contentView + .onChange(of: image, perform: { _ in updateCodeText() }) + .onChange(of: image, perform: { _ in updateCodeText() }) + } + } + + func updateCodeText() { + let imageName = image?.name ?? "" + let sizeName = YDSProfileImageView.ProfileImageViewSize.allCases[sizeSelectedIndex] + code = """ +YDSProfileImageView( + image: \(imageName), + size: .\(sizeName) +) +""" + } +} + +extension SwiftUIImage: Equatable { + public static func == (lhs: SwiftUIImage, rhs: SwiftUIImage) -> Bool { + return lhs.name == rhs.name } }