SwiftUI

· iOS/Swift
basicText는 아래와 같이 modifier들을 사용가능.struct SwiftUIView: View {    var body: some View {        Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus tempus sem at congue varius. Nunc vulputate purus eros, vitae venenatis turpis blandit in.")            .bold()     // 볼드체            .italic()   // 이텔릭            .strikethrough(true, color: .blue)  // 취소선            .underline(true,..
· iOS/Swift
SwiftUI의 뷰 계층에서 UIKit을 사용하기 위한 방법으로 UIViewRepresentable, UIViewControllerRepresentable 을 제공. (https://swifty-cody.tistory.com/44) 반대로 UIKit 뷰 계층에서 SwiftUI를 사용하기 위한 방법으로 UIHostingViewController를 제공함. https://developer.apple.com/documentation/swiftui/uihostingcontroller UIHostingController | Apple Developer DocumentationA UIKit view controller that manages a SwiftUI view hierarchy.developer.apple...
· iOS/Swift
(WWDC22) Hello Swift Charts(WWDC22)Swift Charts: Raise the bar Swift Charts FrameworkApple이 디자인한 Chart를 만들기 위한 Framework.SwiftUI와 동일한 선언적 문법.  Mark차트에서 각 항목에 대한 요소를 Mark라고 함.위 그림에서 Mark는 Bar Mark.import Chartsimport SwiftUIstruct StylesDetailsChart: View { var body: some View { Chart { BarMark( x: .value("Name", "Cachapa"), y: .value("Sales", 90..
· iOS/Swift
TCA가 앱 개발에서 해결하고자 하는 것상태(State) 관리: 간단한 값 타입들로 어플리케이션의 상태를 관리하는 방법, 상태를 공유를 통해 화면에서 일어나는 변화(Mutation)를 다른 화면에서 즉시 관측(Observe)하는 방법을 제공.합성(Composition): 기능을 여러 개의 독립된 모듈로 추출하는 방법, 이 모듈을 다시 합쳐서 거대한 기능을 작은 컴포넌트의 집합으로 구성하는 방법을 제공.사이드 이펙트(Side Effects): 어플리케이션 바깥세상과 접촉하는 작업을 테스트할 수 있고 이해하기 쉽게 작성하는 방법을 제공.테스팅(Testing): 아키텍처 내부의 기능을 테스트하는 방법뿐만 아니라 여러 파트로 구성된 기능의 통합 테스트를 작성하는 방법, 사이드 이펙트가 어플리케이션에 끼치는 영향..
· iOS/Swift
WWDC의 Demystify SwiftUI를 정리한 내용입니다.SwiftUI는 선언적UI로서 고수준의 앱이 원하는 것을 Describe하면 SwiftUI가 이를 구현하는 방법을 정확히 결정.대부분의 경우 잘 작동하지만, 예상하지 못한 동작을 하는 순간은 생겨나는데,이런 순간에 원하는 결과를 얻기 위해 SwiftUI가 뒤에서 무엇을 하는지 이해하는 것이 도움이 됨. SwiftUI가 코드를 볼때 무엇을 보는가Identity: SwiftUI가 앱의 여러 업데이트에서 element를 동일하거나 별개로 인식하는 방법Lifetime: SwiftUI가 시간이 지남에 따라 View와 데이터의 존재를 추적하는 방법의존성: SwiftUI가 인터페이스를 업데이트해야하는 시기와 이유를 이해하는 방법위 세가지 개념이 Swift..
Platforms State of the Union을 훝고 갑니다. 추후 각 세션 정리 예정입니다. Swift Swift Macros Boilerplate 코드를 좀 더 깔끔하게 만들어 줄 수 있는 방법입니다. 위처럼 @가 붙은 attribute일 수도 있고, 독립적으로 #이 붙은 형태일 수도 있습니다. 이 #URL Macro는 URL을 초기화하여 언래핑시켜주는 코드인데, 해당 Macro에서 Expand Macro를 통해 확인이 됩니다. 그 뿐만 아니라 유효한 URL String인지도 컴파일 타임에 체크해주고, 올바른 코드를 작성할 수 있도록 커스텀 피드백을 할 수 있게 해줍니다. fetchContent(_:completion:) 함수에 async/await을 사용하고 싶을 땐, 위처럼 @AddAsync..
· iOS/Swift
Xcode 14.3이 릴리즈되면서 Swift 5.8도 업데이트되었습니다. 변경점들을 간단하게 정리해봅니다. Function back deployment (SE-0376) @backDeployed(before:) attribute를 통해 이전 버전의 프레임워크에서 새 API를 사용할 수 있게 해줍니다. 함수에 대한 코드를 앱의 바이너리에 작성 후 런타임 시 검사하여 수행됩니다. 사용자가 적절한 새 OS를 사용하는 경우 시스템 자체 버전의 함수가 사용되고, 아닌 경우 앱 바이너리에 복사된 버전에 대신 사용됩니다. 단, @backDeployed는 함수, 메서드, 서브스크립트, 계산프로퍼티에만 적용됩니다. 당연하게도 만능으로 새 기능을 이전 OS에서 쓸 수 있게 한다던가 하는건 아닌거죠. 아래는 예시입니다. @..
· iOS/iOS Dev
MVI pattern이 오고 있습니다.(이미 왔나요?) 이번에 다녀온 SyncSwift2022 컨퍼런스에서 MVI 패턴에 대한 언급이 2회 등장했습니다. 두번 모두 SwiftUI에 대한 설명중에 선언적 UI인 SwiftUI에서는 MVVM보다는 MVI패턴이 더 어울린다는 내용이었습니다. 여기서 MVI는 Model, View, Intent를 의미하고, 아래와 같은 단방향 데이터 흐름을 보여주는 패턴입니다. View로부터 사용자가 UI event를 일으키면, 그 action을 받아서 Intent가 Model의 State를 update시키고, 그 update된 Model의 State를 View가 반영해서 사용자에게 보여주는 흐름입니다. (SyncSwift2022에서 문상봉님 세션에서는 Intent역할을 좀더 세..
· iOS/Swift
바로 이전 글에서 정리했던 ViewModifier 프로토콜과 유사하게ButtonStyle 이라는 프로토콜이 있습니다.이 프로토콜로 작성한 구조체는SwiftUI Button의 .buttonStyle() modifier를 통해 ButtonStyle을 설정할 때 쓸 수 있습니다. 간단한 예제입니다.ButtonStyle 프로토콜의 구조체는func makeBody(configuration:) -> some view 를 구현해주면 됩니다.struct CustomButtonStyles: ButtonStyle { var systemName: String var title: String func makeBody(configuration: Configuration) -> some View { ..
· iOS/Swift
ViewModifier 프로토콜은'View 혹은 View Modifier에 적용해서 기존과 다른 버전을 생성하는 프로토콜' 입니다.다시말해 커스텀 Modifier를 만들 수 있게 해주는 프로토콜입니다. 간단한 예시로 보겠습니다.아래와 같이 ViewModifier 프로토콜을 작성해줍니다.저는 제 앱에서 공통으로 사용할 타이틀 크기와 색상을 지정해주었습니다.struct MyAppTitle: ViewModifier { func body(content: Content) -> some View { return content .font(.system(size: 30, weight: .bold)) .foregroundColor(.indigo) }}  그리..
· iOS/Swift
지난 글에서는 Swift, SwiftUI 작성시 자주 마주하는 Property Wrapper 중에서 @State, @Binding, @Published, 그리고 @ObservedObject가 무엇인지 정리해봤습니다. 이번 글에서는 @EnvironmentObject와 @Environment에 대해 정리해봅니다. @EnvironmentObject SwiftUI에서는 환경값이 바뀌었을 때, 해당값에 따라서 뷰를 그릴 수 있게 해주는 @EnvironmentObject라는 Property Wrapper를 제공합니다. @EnvironmentObject Property Wrapper는 이전글에서 다룬 ObservableObject 프로토콜을 따르는 프로퍼티에만 사용할 수 있습니다. 이 값은 부모뷰로부터 주입된 값으로..
· iOS/Swift
지난 글에서는 Property Wrapper가 무엇인지 정리해봤습니다. 이번 글에서는 Swift, SwiftUI로 작성 시 자주 쓰게 되는 Property Wrapper를 정리해보겠습니다. @State와 @Binding @State와 @Binding은 SwiftUI에서 자주 사용하는 Property Wrapper입니다. @State로 선언한 값을 참조하여 SwiftUI를 그리면, 해당 값이 변경될 때 SwiftUI가 이를 반영하여 변경됩니다. // 예시 struct PlayButton: View { @State private var isPlaying: Bool = false var body: some View { Button(isPlaying ? "Pause" : "Play") { isPlaying.to..
· iOS/Swift
Swift, SwiftUI로 코드를 작성하다보면 프로퍼티 앞에 붙여주는 아래와 같은 친구들(?)을 마주하게 됩니다. @main, @Environment, @State, @Binding, @Published, @ObservedObject, @ViewBuilder, @escaping 등.. @가 앞에 붙어 있는 이 친구들은 Property Wrapper라고 부릅니다. 그 동안은 그냥 각각의 용도에 맞춰서 프로퍼티 앞에 붙여서 사용하고 있었는데, (1)에서는 이 Property Wrapper가 무엇인지 알아보고, (2)(다음글)에서는 자주 마주하는 Property Wrapper들의 용도도 정리해보려 합니다. swift.org의 property 문서를 보면 Property Wrapper의 설명이 아래와 같이 되..
· iOS/Swift
아직까지는 iOS의 수많은 프로젝트가 UIKit기반일 듯 한데요.그래서 Apple에서는 SwiftUI를 밀고 있으면서도UIKit을 SwiftUI에서 재사용하거나, 최근(WWDC2022)에는 UIKit(UITableview)에 SwiftUI를 녹여서 쓸 수 있는 방법을 제시하고 있습니다. 그중에서 SwiftUI에서 UIKit을 사용할 수 있도록 제공하는 방법이UIViewRepresentable, UIViewControllerRepresentable 프로토콜입니다.UIViewRepresentable 프로토콜은 UIView를UIViewControllerRepresentable 프로토콜은 UIViewController를 SwiftUI에서 사용할 수 있도록 해줍니다.두 프로토콜들은 iOS 13.0부터 사용 가능합..
· iOS/Swift
SomeSwiftUIView라는 SwiftUI 파일을 생성을 하면하단에 SomeSwiftUIView_Preview라는 이름의 PreviewProvider 프로토콜을 따르는 구조체가 함께 생성이 됩니다.struct SomeSwiftUIView_Previews: PreviewProvider { static var previews: some View { SomeSwiftUIView() }} 이 구조체는1. 우리가 작성한 SwiftUI View의 내용을 Preview(혹은 Canvas)에 반영시켜주거나,2. PreviewProvider 내의 previews의 내용을 Preview에 반영시켜주어우리가 확인하고자 하는 View를 빠르게 확인할 수 있게 해줍니다.1. 우리가 실제로 작성해서 사..
SwiftyCody
'SwiftUI' 태그의 글 목록