1. iOS 15를 기준으로 UIButton이 많이 다르다
iOS 15부터 UIButtonConfiguration이 추가되었고, style이 생김(plain, gray, tinted, filled)
style을 안쓰는 기존의 UIButton으로 하려면 style을 default로 설정하면 됨(Interface Builder 기준)
유의해야될 점
1. UIButtonConfiguration(style)을 사용할 경우 상황에 따라 버전대응이 필요
iOS 15 이전 버전에서는 UI가 의도와는 다르게 그려짐
따라서 최소버전이 iOS 14 이하라면, 버전별 분기처리를 해야함(키워드, @available)
2. UIButtonConfiguration을 사용할 경우 이미지 크기 변경에 제약이 있음
style button의 이미지가 asset의 image일 경우, pdf확장자(vector data)가 아니라면 크기 변경이 안됨
SF Symbol 이미지(systemName 쓰는거)는 가능함!
SF Symbols are entirely vector graphics, so you can adjust their size freely without losing quality
SF Symbol은 벡터로 그려지기 때문에 해상도를 잃지 않고 자유롭게 조절할 수 있음
커스텀하게 버튼을 구현해야 한다면 UIView에 UIImageView와 UILabel를 넣고, UIGestureRecognizer를 붙이거나 투명한 Button을 위에 붙이는 식으로 할 것 같다
다만 버튼의 State 값에 따른 UI, 로직 처리가 필요할 경우 버튼을 이용하는게 좋을 것 같다
2. App Thinning과 Slicing
App thinning
앱이 디바이스에 설치 될 때, 앱 스토어와 운영체제가 디바이스의 특성에 맞게 설치되도록 하는 설치 최적화 기능
Slicing
앱이 지원하는 여러 디바이스에 각각 조각 애플리케이션 번들을 생성하고, 해당 디바이스에 가장 적합한 조걱을 전달하는 기술
앱 최적화와 관련한 내용인데 추후 자세히 공부해보자
출처: https://ttuk-ttak.tistory.com/42
3. Mac Catalyst
프로젝트 설정 - Deployment Info에서 선택 가능한 항목 중 하나
Mac Catalyst
iPadOS 앱을 만들면 Mac에서도 출시 할 수 있음(인텔 맥 포함)
하지만 Apple Silicon Mac(m1)이 나오면서 iOS 앱도 Mac 앱으로 출시 할 수 있게 됨
4. textField의 text 공백 여부 확인(feat. Optional String)
textField에 값이 입력됬는지 확인하는 방법으로는 두가지가 떠오른다
1. textField.text! != ""
2. textField.text!.isEmpty != false
사실 한가지 더 있었는데... 바로 nil 체크 였음
3. textField.text != nil (X)
textField.text는 Optional String이지만 절대 nil을 반환하지 않는다
textField.text에 nil을 직접 할당해도, 아무 값도 주지 않아도, 빈 문자열을 넣어도, 무조건 빈 문자열("")을 반환한다.
그럼 왜 처음부터 타입을 옵셔널 스트링으로 한건지 궁금했는데 찾아본 결과, 대부분의 의견은 “objective-c에서는 text가 nil이 될 수 있었기 때문에 호환성을 위해 옵셔널로 선언한 것 같다" 였음
근데 너무 궁금해서 objective-c로 textField.text에 nil이 정말 담기는지 확인해봄(objective-c 몰라서 헛짓일수도 있음)
textField를 추가하고, viewDidLoad에서 breakpoint를 걸어서 nil 체크 했는데 처음에도 false, 직접 nil을 할당한 이후에도 false가 됨.. 정말 objective-c의 text가 nil이 될 수 있었던 건가,,? 아니면 나중에 바뀐건가,,?
nil을 반환하지 않는 이유는 get 연산 프로퍼티로 언래핑을 해서 반환하기 때문이다
textField.text의 구현부를 확인할 수는 없었지만 get 연산 프로퍼티로 nil일 경우 언래핑해서 빈 문자열("")로 반환해주는 것 같음
textField.text의 빈 문자열("")을 굳이 nil이랑 구분지어 생각하지 말아야겠다
문자열이 비어있는지 확인할때는, isEmpty를 사용하자(성능상 이점)
isEmpty는 string의 firstIndex가 lastIndex랑 같은지만 비교하기 때문에, O(1)의 속도로 매우 빠름
String, Character, 성능과 관련된 내용은 더 깊게 공부해보자
기타 내용들
1. User Defined Runtime Attributes로 속성에 지정할 수 있는 값 타입은 한정적이다
ex - UIColor(O) CGColor(X) 따라서 layer.borderColor 값을 지정할 수 없었다
예전에 잠깐 일했던 스토리보드 쓰던 업체에서 User Defined Runtime Attributes를 사용했었는데,,, 어떤거는 이거쓰고 어떤거는 코드로 하고 기준이 없어서 혼란스러웠다
그냥 직접 코드로 구현하기로 통일하자
2. Snippets
Xcode에서 원하는 코드 블럭을 저장했다가 필요할 때 꺼내 쓸 수 있도록 해주는 기능
3. OutletCollection
동일한 타입의 Outlet 컴포넌트들을 배열로 담을 수 있음
4. Parameter VS Argument
Parameter - 매개변수, 전달인자를 받을 변수
Argument - 전달인자, 함수를 호출할 때 전달하는 값
5. 논리평가(Short-Circuit Evaluation)
조건을 판별할 때, 이미 참 또는 거짓이 정해진 경우 남은 조건식은 판단안하고 넘어가는 것
ex) false && true == false - 앞에서 false임을 알 수 있으므로, 뒤의 조건은 패스
ex) true || fase == true - 앞에서 true임을 알 수 있으므로, 뒤의 조건은 패스
논리평가를 잘 고려할 경우 불필요한 연산 수행이 줄어들기 때문에 성능 향상
'SeSAC' 카테고리의 다른 글
8.7 ~ 8.11 TIL (0) | 2023.08.15 |
---|---|
7.31 ~ 8.4 TIL (0) | 2023.08.09 |
7.24 ~ 7.28 TIL (0) | 2023.08.02 |
7.20 ~ 21 TIL (0) | 2023.07.26 |
SeSAC iOS 3기 시작 (0) | 2023.07.15 |