1. @available, #available - 버전 분기 구현
iOS 버전에 따라 지원하거나 지원하지 않는 기능이 있기 때문에 필요에 따라(최소 버전) 버전 분기 처리가 필요하다.
@available
클래스, 프로토콜, 함수 앞에 선언하여 적용할 플랫폼, OS를 제한함.
ex - iOS 13 미만 버전 대응시 필요한 AppDelegate 분기처리
// MARK: UISceneSession Lifecycle
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
#available
플랫폼, OS 별로 분기처리를 하기 위해 사용하며 런타임으로 검사해서 Bool을 반환함.
ex - datePicker의 inline style 사용시 필요한 iOS 14 미만 버전 분기처리
func configureDatePicker() {
if #available(iOS 14.0, *) {
datePicker.preferredDatePickerStyle = .inline
} else {
datePicker.preferredDatePickerStyle = .wheels
}
}
2. clipsToBounds, masksToBounds
View 컴포넌트에 그림자 효과를 넣을때, clipsToBounds가 true이면 적용 안됨.
clipsToBounds: view의 경계선을 기준으로 외부 영역은 짤라낼지 여부(벗어나는 SubView들을 짤라낼지)
- UIImageView는 default로 true, 나머지는 false로 설정되어있음.
- masksToBounds: clipsToBounds와 동일하나 layer를 기준으로 한다.
이미지뷰에 그림자 효과를 넣으려고 clipsToBounds를 false로 할 경우, 이미지가 뷰 영역을 넘어서도 그대로 보여진다.
따라서 이미지뷰 자체에 그림자 효과를 넣진 않고, UIView로 감싸서 view에 그림자 효과를 넣어서 구현 할 수 있다.
3. isHidden과 스택뷰
isHidden을 true로 할 경우 레이아웃은 차지하지만 시각적으로는 보이지 않음.
하지만 스택뷰에 추가된 서브뷰들을 hidden하면, 해당 서브뷰를 제거한 것 처럼 줄어듬.
스택뷰와 hidden 속성을 적절히 활용해 볼 수 있겠다. ⬅️ 레이아웃 구현할 때 특히
4. alpha와 opacity
alpha는 UIView의 속성으로, 자신과 하위뷰들까지 다 투명하게 만듬.


opacity는 자기 자신만 투명하게 만듬, CALayer의 속성.

5. for - in 과 forEach의 차이
1. continue & break
- for-in: 사용자가 직접 구현하는 반복문.
- forEach: 반복하려는 구문을 forEach라는 함수의 파라미터로, "클로저"로 작성해서 넘겨주는 것.
따라서 반복문 안에서 사용할 수 있는 continue와 break는 for-in 에서는 사용 가능하지만, forEach에서는 불가능함.
2. return
- for-in에서는 반복문을 돌다가, return을 만나면 함수가 종료됨.
- forEach에서는 반복문이 아닌 클로저, 즉 익명함수를 전달하므로 return을 만나는 것은 클로저를 종료하는 것을 뜻함.
따라서 전달한 클로저를 요소의 갯수만큼 실행하는 forEach에서는 return이 반복 횟수에 영향을 주지 않음.
6. 타입 메소드 static과 class의 차이
static은 struct와 class에서 다 사용가능, 오버라이딩 불가.
class는 class에서만 사용가능, 오버라이딩 가능, let으로 선언 못하고 var로 선언해야 함.
7. UITextField의 Action(return키 눌렀을때 키보드 내리기)
editingDidEnd
- 텍스트필드의 커서가 끝났을때 호출되는 액션.
didEndOnExit
- 키보드에서 return 키가 눌렸을때 호출되는 액션으로, 구현만 되면 return 키 눌렀을때 키보드가 내려감.
(주의) 눌렀을때 호출되는것이 아닌, 직접 해당 액션 함수를 호출하면 키보드는 내려가지 않음.
8. DateFormatter 관련 주의사항
1. DateFormatter는 생성하는데 비용이 많이듬. 따라서 매번 생성하지 말고 프로퍼티나 전역으로 만들어서 활용하기.
2. DateFormatter의 연도 - "YYYY" 와 "yyyy"는 중요한 차이가 있음.
YYYY: 주 기반 연도
yyyy: 일반 달력 연도
따라서 일반적으로 사용하는 것은 "yyyy"이며 "YYYY"를 사용할 경우 특히 연말에 문제가 발생할 수 있음.
'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.18~19 TIL(새싹 iOS 1,2일차/Two days I Learned) (0) | 2023.07.20 |
SeSAC iOS 3기 시작 (0) | 2023.07.15 |
1. @available, #available - 버전 분기 구현
iOS 버전에 따라 지원하거나 지원하지 않는 기능이 있기 때문에 필요에 따라(최소 버전) 버전 분기 처리가 필요하다.
@available
클래스, 프로토콜, 함수 앞에 선언하여 적용할 플랫폼, OS를 제한함.
ex - iOS 13 미만 버전 대응시 필요한 AppDelegate 분기처리
// MARK: UISceneSession Lifecycle
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
#available
플랫폼, OS 별로 분기처리를 하기 위해 사용하며 런타임으로 검사해서 Bool을 반환함.
ex - datePicker의 inline style 사용시 필요한 iOS 14 미만 버전 분기처리
func configureDatePicker() {
if #available(iOS 14.0, *) {
datePicker.preferredDatePickerStyle = .inline
} else {
datePicker.preferredDatePickerStyle = .wheels
}
}
2. clipsToBounds, masksToBounds
View 컴포넌트에 그림자 효과를 넣을때, clipsToBounds가 true이면 적용 안됨.
clipsToBounds: view의 경계선을 기준으로 외부 영역은 짤라낼지 여부(벗어나는 SubView들을 짤라낼지)
- UIImageView는 default로 true, 나머지는 false로 설정되어있음.
- masksToBounds: clipsToBounds와 동일하나 layer를 기준으로 한다.
이미지뷰에 그림자 효과를 넣으려고 clipsToBounds를 false로 할 경우, 이미지가 뷰 영역을 넘어서도 그대로 보여진다.
따라서 이미지뷰 자체에 그림자 효과를 넣진 않고, UIView로 감싸서 view에 그림자 효과를 넣어서 구현 할 수 있다.
3. isHidden과 스택뷰
isHidden을 true로 할 경우 레이아웃은 차지하지만 시각적으로는 보이지 않음.
하지만 스택뷰에 추가된 서브뷰들을 hidden하면, 해당 서브뷰를 제거한 것 처럼 줄어듬.
스택뷰와 hidden 속성을 적절히 활용해 볼 수 있겠다. ⬅️ 레이아웃 구현할 때 특히
4. alpha와 opacity
alpha는 UIView의 속성으로, 자신과 하위뷰들까지 다 투명하게 만듬.


opacity는 자기 자신만 투명하게 만듬, CALayer의 속성.

5. for - in 과 forEach의 차이
1. continue & break
- for-in: 사용자가 직접 구현하는 반복문.
- forEach: 반복하려는 구문을 forEach라는 함수의 파라미터로, "클로저"로 작성해서 넘겨주는 것.
따라서 반복문 안에서 사용할 수 있는 continue와 break는 for-in 에서는 사용 가능하지만, forEach에서는 불가능함.
2. return
- for-in에서는 반복문을 돌다가, return을 만나면 함수가 종료됨.
- forEach에서는 반복문이 아닌 클로저, 즉 익명함수를 전달하므로 return을 만나는 것은 클로저를 종료하는 것을 뜻함.
따라서 전달한 클로저를 요소의 갯수만큼 실행하는 forEach에서는 return이 반복 횟수에 영향을 주지 않음.
6. 타입 메소드 static과 class의 차이
static은 struct와 class에서 다 사용가능, 오버라이딩 불가.
class는 class에서만 사용가능, 오버라이딩 가능, let으로 선언 못하고 var로 선언해야 함.
7. UITextField의 Action(return키 눌렀을때 키보드 내리기)
editingDidEnd
- 텍스트필드의 커서가 끝났을때 호출되는 액션.
didEndOnExit
- 키보드에서 return 키가 눌렸을때 호출되는 액션으로, 구현만 되면 return 키 눌렀을때 키보드가 내려감.
(주의) 눌렀을때 호출되는것이 아닌, 직접 해당 액션 함수를 호출하면 키보드는 내려가지 않음.
8. DateFormatter 관련 주의사항
1. DateFormatter는 생성하는데 비용이 많이듬. 따라서 매번 생성하지 말고 프로퍼티나 전역으로 만들어서 활용하기.
2. DateFormatter의 연도 - "YYYY" 와 "yyyy"는 중요한 차이가 있음.
YYYY: 주 기반 연도
yyyy: 일반 달력 연도
따라서 일반적으로 사용하는 것은 "yyyy"이며 "YYYY"를 사용할 경우 특히 연말에 문제가 발생할 수 있음.
'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.18~19 TIL(새싹 iOS 1,2일차/Two days I Learned) (0) | 2023.07.20 |
SeSAC iOS 3기 시작 (0) | 2023.07.15 |