꿀똥벌레
꿀똥벌레 개발 블로그
꿀똥벌레
전체 방문자
오늘
어제
  • 분류 전체보기 (90)
    • JAVA (17)
    • SPRING (14)
    • Elasticsearch (4)
    • GRADLE (2)
    • HTML, CSS (0)
    • JAVASCRIPT (0)
    • GIT (1)
    • Vue.js (1)
    • server (1)
    • Python (0)
    • IT리뷰 (0)
    • 인프라 (6)
    • IOS (21)
    • 디자인패턴 (20)
    • Kafka (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스프링 인티그레이션
  • maxConnTotal
  • ES
  • connectionRequestTimeout
  • elasticsearch
  • Index Template
  • spring integration
  • SWIFT
  • persistence connection
  • 엘라스틱서치
  • maxConnPerRoute
  • mappings
  • KEEPALIVE
  • 스프링 인테그레이션
  • spring
  • springintegration
  • 인덱스 템플릿
  • Index
  • persistent connection
  • java

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
꿀똥벌레

꿀똥벌레 개발 블로그

IOS

스위프트 Attributes

2022. 10. 4. 10:43

@Escaping (Escaping Closure)

  • 함수의 파라미터로 받는 클로저가 함수 외부에서 실행 되는 경우 달아준다.
func asdf(closure: @escaping () -> Void) {
    asyncMethod(callBack: closure())
}
  • asdf메소드 실행시 내부 async의 콜백으로 클로저가 주어지고, asdf는 즉시 종료되기 때문에
  • escaping closure가 아닌경우 asdf 메소드 종료와 함께 소멸되므로, escaping 처리가 필요하다.

@dynamicCallable

  • class, struct, enum, protocol 에 붙힐 수 있으며, 내부 구현 함수를 즉시 실행 하도록 사용 가능하다.
  • 해당 타입은 dynamicallyCall(withArguments:) 또는 dynamicallyCall(withKeywordArguments:) 혹은 둘다 를 구현 해야한다.
  • withArguments 파라미터는 반드시 ExpressibleByArrayLiteral(배열형태) 프로토콜을 따르는 파라미터를 받아야 한다. return 타입은 어느 것이든 상관 없다.
  • withKeywordArguments 파라미터는 반드시 ExpressibleByDictionaryLiteral(키, 밸류 형태) 프로토콜을 따르는 파라미터를 받아야 한다. 또한 파라미터에 해당하는 키값은 ExpressibleByStringLiteral 를 따라야 한다. 마찬가지로 return 타입은 어느 것이든 상관 없다.
@dynamicCallable
struct TelephoneExchange {
    func dynamicallyCall(withArguments phoneNumber" [Int] {
        ...
    }
}

let dial = TelephoneExchange()
dial(4, 1, 1)
dial.dynamicallyCall(withArguments: [4, 1, 1])

@dynamicCallable
struct Repeater {
    func dynamicallyCall(withKeywordArguments pairs: KeyValuePairs<String, Int>) -> String {
            ...
    }
}

let repeatLabels = Repeater()
//withKeywordArguments 로 사용시 아래와 같이 호출 가능하다.
repeatLabels(a: 1, b: 2, c: 3, b: 2, a: 1)

@frozen

enum 에서 더이상 추가 될 case가 없다는 의미로 붙여준다.

//frozen 이 없는 enum 의 경우
switch size {
    case .regular: 
    case .medium:
    case .large:
    //frozen 이 없으니 추후 케이스가 추가 될 확률이 있기 때문에 unknown 을 달아 default설정을 해줘야 한다.
    @unknown default:
        error()
}

//frozen 이 있는 경우
switch size {
    case .regular: 
    case .medium:
    case .large:
}
  • frozen 이 있는 경우 더이상 enum case가 변하지 않을 것임을 약속했기 때문에 default 및 @unknown 이 필요 없다.

'IOS' 카테고리의 다른 글

UIKit UIView 의 Frame 과 Bounds  (0) 2022.10.10
Swift 접근 한정자  (0) 2022.10.05
스위프트 Generic  (0) 2022.10.04
스위프트 Property Wrapper  (0) 2022.10.04
스위프트 키워드  (0) 2022.10.04
    꿀똥벌레
    꿀똥벌레
    개발자 꿀똥벌레 입니다.

    티스토리툴바