iOS iOS13 Deprecated statusBarFrame, keyWindow 수정하기

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


StatusBar Height 구하기

기존 iOS13 이전에는 statusbar의 높이를 UIApplication.shared.statusBarFrame.height를 통해 구할 수 있었습니다.

그러나 iOS13부터는 이 방식이 deprecated 되어 아래 문구를 띄워주게 됩니다.

이제 window scene의 statusbarManager를 사용하라는 의미입니다.
이는 아래 방식으로 고쳐 사용하면 됩니다.

Before

UIApplication.shared.statusBarFrame.height

After

view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0

옵셔널은 상황에 맞게 처리해주시면 됩니다.

keyWindow

keyWindow란 윈도우가 여러개 존재할 때, 가장 앞쪽에 배치된 윈도우를 의미합니다.
터치 이벤트같은 경우 해당 이벤트들은 이벤트가 발생한 윈도우에 직접 전달이 됩니다.

그런데 관련 좌표값이 없는 이벤트 같은 경우에는 키 윈도우로 전달이 됩니다.

이러한 좌표값이 없는 이벤트는 시스템이 생성한 윈도우에서 생성된 이벤트를 의미합니다.

예로들어, 가상 키보드 창은 시스템이 생성한 윈도우입니다.
키보드 창에서 글자를 입력할 때 발생하는 이벤트들은 앱의 키 윈도우로 전달이 됩니다.
하나의 시점에는 오직 한개의 윈도우만이 키 윈도우가 될 수 있으며, 키 윈도우는 isKeyWindow 속성을 통해 결정 할 수 있습니다.

이러한 keyWindow는 iOS13에서 deprecated 되었습니다.

이제 keyWindow를 window로 사용해야 합니다.

Before

UIApplication.shared.keyWindow

After

UIApplication.shared.window.first { $0.isKeyWindow }

만약 윈도우의 bottomConstraint를 설정하고 싶다면 어떻게 해야할까요?

let bottomConstraint = UIApplication.shared.windows.filter { $0.isKeyWindow }.first?.safeAreaInseta.bottom ?? 0

git tag 사용해보기

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


Git Tag

  • 커밋을 참조하기 쉽도록 알기 쉬운 이름을 붙이는 것
  • 한 번 붙인 태그는 브랜치처름 위치가 이동하지 않고 고정되어 있음

Tag 사용방법

1. 일반적인 태그 달아보기

현재 HEAD에 tag 설정

git tag <tag name>

2. 특정 커밋 버전에 태그 달아보기

git tag <tag name> <commit version>

tag 원격 저장소에 push

git push origin <tag name>  // tag name에 해당하는 것만 push
git push origin --tags  // 모든 tag push

tag 삭제

git tag -d <tag name>
git push origin :<tag name>

등록된 tag 이름 확인

git tag

Swift - ~= 연산자란?

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


~= 연산자

대상이 특정 범위에 속하는 지 범위를 체크하는 연산자
switch 구문에 ~= 연산자가 사용되는데, case의 범위를 확인할 때 내부적으로 ~=연산자를 불러 사용함

~= 연산자는 비교연산자 == 의 확장된 상태로 생각할 수 있다.

두 대상이 같은 지 단순 비교할 때 == 연산자를 사용하는데 이와 달리 ~=는 대상이 어떤 범위에 속하는지를 확인!

swift - ==와 ===

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


==

a == b: a값과 b값이 같은 지 비교

let v1 = 1
let v2 = 2

print(v1 == v2) // false

===

a === b: a가 참조하고 있는 인스턴스와 b가 참조하고 있는 인스턴스가 같은 지 비교

swift에서는 크게 값, 참조타입이 존재하는데 참조타입을 가질 수 있는 클래스 객체를 참조할 수 있는 변수는 다수가 될 수 있기 때문에 === 연산자가 필요하다.

let c1 = Person(id: 1, name: "zehye")
let c2 = Person(id: 1, name: "jihye")
let c3 = c1

print(p1 === p2)  // false
print(p1 === p3)  // true

클래스의 인스턴스는 heap 영역에 할당되며 인스턴스를 참조하는 변수는 stack영역에 할당된다.
그래서 ===는 heap 영역의 값을 비교하고 ==는 stack영역의 값을 비교한다.

Swift - Mutating이란?

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


Mutating

구조체의 메서드가 구조체 내부에서 데이터 수정될때는 Mutating 키워드를 선언해야함

struct Point {
  var x = 0
  var y = 0

  mutating func moveTo(x: Int, y: Int) {
    self.x = x
    self.y = y
  }
}

즉, 다른 구조체안에서 Mutating이 있느냐 없으냐에 따라 원래 구조체 내부의 값을 변경하는 api인지 아닌지 유추가 가능하다.