Protocol

· iOS/Swift
프로토콜 extension 프로토콜 자체를 확장하여 프로토콜 member의 기본 구현을 제공할 수 있습니다. extension Localizable { static var supportedLanguages: [Language] { return [.english] } } 여기서는 supportedLanguages의 기본 구현으로 Localizable을 확장합니다. Localizable을 준수하는 각 타입은 이제 해당 구현에 액세스할 수 있으므로 자체 정의할 필요가 없습니다. struct Image: Localizable { // no need to add `supportedLanguages` here } 위까지는 코드의 모든 유형이 구현할 수 있는 프로토콜로 작업했습니다. 특정 class에 의해서만 준수되..
· 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
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. 우리가 실제로 작성해서 사..
· iOS/Swift
CustomStringConvertible 프로토콜은 객체를 String으로 변환해서 표현하고 싶을 때 사용하는 프로토콜로, 주로 print()함수를 통해 출력할 때 유용합니다. 정의를 보면 description 계산 프로퍼티를 구현하도록 되어 있는 것을 확인할 수 있습니다. 예제에서는 Point 구조체를 CustomStringConvertible 프로토콜을 구현하여, print()함수 호출시 출력할 String을 정의해주었습니다. 사실 구조체는 CustomStringConvertible을 구현하지 않아도 어느 정도 String으로 변환해서 보여줍니다. 아래는 Almond 구조체입니다. print했을 때, 객체의 타입과 프로퍼티 값들을 보여줍니다. struct Almond { var name: Strin..
· iOS/Swift
Equatable Equatable은 두개의 값이 동일한 값인지 아닌지 비교를 하기 위해서 따라야하는 프로토콜입니다. 이 프로토콜을 따르는 타입의 인스턴스는 == 나 != 연산자로 같은지, 같지 않은지 판단할 수 있게 됩니다. Swift 표준 라이브러리의 대부분의 기본 타입들(Int, Double, Float, String, Bool, ...)은 이 프로토콜을 따르고 있습니다. 기본 타입들이 아닌 클래스, 구조체도 해당 프로토콜을 따르면 비교연산자를 통해서 같은지, 아닌지 판단할 수 있게 됩니다. Equatable 프로토콜을 살펴보면 static func ==(lhs: Self, rhs: Self)->Bool 함수를 구현함으로써 해당 프로토콜을 쓸 수 있게 되어 있습니다. lhs는 ==의 왼쪽에, rhs..
SwiftyCody
'Protocol' 태그의 글 목록