억음부호 `Swift`

나이가 들어가면서, 점점 미래가 불안해지고 뭐하고 먹고 살아가야하나 고민을 하고 있다.

그래서, 내가 제일 잘 할수 있는 코딩(?)을 더 잘하려고 한다.
늦은감이 있지만, RxSwift부터 최신트랜드를 학습하며 따라가려고 노력중이다.
Swift를 좀 깊게 학습하고 싶어서 코쟁이 형들하고, 잘한다는 형들의 소스를 보고 있는 중이다.

그러던 오늘, 억음이라고 불리는 ` 표시의 소스코드를 발견하였다.
이 표시가 억음이라는걸 알아내는데도 꽤 시간이 걸렸다. 영어로는 backtick이라고 표현하는것 같다.(추측..)

Martin이라는 멋진형이 쓴글을 직독해서 블로그한다.
마틴형 링크는 하단에 표기해놓았다. 똑똑한 형 같으니 그 블로그를 뒤적거려보는것도 좋을것 같다.
오역이 있을수 있으니, 오역이나 더 좋은 표현이 있다면 댓글로 남겨주길 부탁한다. (반말로 쓰는 이유는 내 블로그에 내가 쓰면서 존칭을 쓰면 이상한 기분이 들어서랄까…)

`은 language keywords로부터 identifier를 만들수 있게 해준다고 한다.

Swift에서 C 또는 Objective-C function을 직접 호출할수 있다, 그러나 C function이름이 guard라면 억음 없이 호출할수 없다.

`guard`()

더 좋은 예제로 enum을 들수 있다. 다음과 같은 값들을 가진 enum을 만들고 싶을수 있다.

enum Foo {
    case `var`
    case `let`
    case `class`
    case `func`
}

let items = [Foo.class, Foo.let, .var]

억음을 사용하면 reserved language keywords를 사용할 수 있다.

당신이 애플 API 디자인처럼 default keyword를 property 이름으로 사용하고 싶다면, 이때 억음을 사용할 수 있다.
NotificationCenter가 싱글톤으로 default를 사용하고 있으며, 이 default는 keyword이며 switch statements로 사용된다.
이를 구현하기 위해서는 다음과 같이 사용하면 된다.

class MyOwnNotificationCenter {
    static let `default` = MyOwnNotificationCenter()
    ...
}

클로져에서 [weak self]를 사용해본적이 있나요? 그렇지 않다면 사용하셔야 합니다.
self를 weak reference하게 만들었을때, self는 optional이고 가끔씩은 문제를 일으키게 됩니다.
Swift4.2 이전에 strong reference self의 이름을 유지하기 위해 다음과 같이 사용했습니다. (또는 strongSelf로 이름을 바꾸어서 사용)

self.provider.fetchData { [weak self] (fetchedData) in
    guard let `self` = self else { return }
    let processedData = self.processData(fetchedData)
    self.updateUI(with: processedData)
}

Swift4.2에서는 다음과 같이 사용합니다.

self.provider.fetchData { [weak self] (fetchedData) in
    guard let self = self else { return }
    let processedData = self.processData(fetchedData)
    self.updateUI(with: processedData)
}

이제 optional binding을 사용해서 weak를 strong으로 reference를 업그레이드 하였습니다.

  • 참고 사이트
  • https://blog.entirely.digital/swift-backticks/

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다