일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ios
- UITextView
- tableView
- MVVM
- UICollectionView
- 리펙터링
- uitableview
- swift documentation
- uiscrollview
- clean architecture
- SWIFT
- Xcode
- swiftUI
- 애니메이션
- collectionview
- rxswift
- Protocol
- ribs
- Clean Code
- HIG
- Observable
- 클린 코드
- 스위프트
- Human interface guide
- map
- 리펙토링
- Refactoring
- combine
- 리팩토링
- RxCocoa
- Today
- Total
목록iOS 응용 (swift) (724)
김종권의 iOS 앱 개발 알아가기
딕셔너리에서의 디폴트 값딕셔너리 인스턴스의 value값에 특정 값을 추가하고 싶은 경우, key값이 존재하지 않을 여지가 있기 때문에 아래처럼 컴파일 에러가 발생var dict = ["a": 1, "b": 2]["a", "b", "c"] .forEach { char in dict[char] += 1 // Value of optional type 'Int?' must be unwrapped to a value of type 'Int' }dict에 "c"키값을 새로 만들어서 1 값이 입력되게끔 하고 싶은 경우?아래처럼 nil을 체크하여 구현이 가능하지만 번거로운 형태["a", "b", "c"] .forEach { char in if ..
reduce 연산자reduce 연산자는 배열과 같은 Collection type들을 하나씩 누적하며 하나의 값으로 만드는 연산자reduce(into:_:)와 reduce(_:_:) 두가지가 존재reduce(_:_:)와 reduce(into:_:)reduce(_:_:)연산자배열과 같은 Collection Type을 순회하면서 하나의 값으로 만들어주는 연산자첫번째 인수에는 순회할때 축적되어야 하는 초기값두번째 인수에는 클로저를 주입하는데, 클로저의 첫번째 값은 순회할때마다 추적되고 있는 값이며 두번째 값은 순회하는 값// exlet arr = [1, 2, 3, 4, 5]let val2 = arr.reduce(0) { result, element in result + element}let val1 = a..
기초) DI (Dependency Injection)이란? DI란, 특정 기능을 사용하려고 할 때, 특정 기능에 대한 구현체를 사용하는쪽에서 주입해주어서 사용하는쪽에 구현체를 위임하는 것 (SOLID원칙 중 의존성 역전, DIP 원칙에 해당) 느슨한 결합도 testable한 코드 ex) 사용하는쪽에서 구현체를 결정하는 DI 형태 코드에서 운동과 관련된 일을 하는 Workoutable이라는 기능이 필요할 때, 프로토콜로 선언 class ViewController: UIViewController { var workout: Workoutable init(workout: Workoutable) { self.workout = workout super.init(nibName: nil, bundle: nil) } r..
UIView를 비교하기 UIView의 인스턴스를 `==`로 비교가 가능 주의) UIView의 프로퍼티인 tag를 사용하는 경우도 있는데, tag를 사용하면 어떤 뷰인지 tag값을 일일이 확인해야 하므로 UIView인스턴스 그대로 비교하는 것을 지향할 것 class ViewController: UIViewController { let view1 = UIView() let view2 = UIView() let view3 = UIView() override func viewDidLoad() { super.viewDidLoad() printSomeView(view: view1) } func printSomeView(view: UIView) { if view1 == view { print("this is view..
사전지식) scale factor 개념scale factor란 pixcel을 표현할 때 더 높은 픽셀 밀도를 표현하기 위한 값@1x는 1배의 픽셀 밀도@2x는 2배의 픽셀 밀도@3x는 3배의 픽셀 밀도ex) Assets.xcassets 파일의 한 이미지 파일UIImage의 size 주의사항UIImage 인스턴스에서 size 프로퍼티를 사용할 수 있는데, 여기서의 size는 위에서 1x, 2x, 3x 중에 어떤 사이즈가 출력될까?let iamge = UIImage(named: "myImage")print(image.size) // CGSize(width: 200, height: 200)정답은 1x기준의 해상도 값이 출력됨이미지의 실제 해상도는 1x의 해상도가 200*200이라면, 2x는 400*400, 3..
sizeToFit() 개념 subview들을 감싸는 알맞은 크기로 view를 리사이징하는 하는 것 알맞은 크기: 뷰가 가지고 있는 subview들의 콘텐츠 사이즈를 딱 채운 크기 (UILabel같은 경우 text를 감싼 크기이고, UIImageView에서는 image를 감싼 크기를 의미) 여기서의 알맞은 크기는 아래에서 알아볼 sizeThatFits에서 리턴되는 값을 사용함 주의 사항) 뷰가 기본적으로 가지고 있는 사이즈로 sizeToFit()되게 하고 싶지 않다면 이 메서드를 오버라이드 하면 안되고 아래에서 볼 sizeThatFits를 사용할 것 sizeThatFits 개념 위에서 알아본 알맞은 크기 sizeThatFits를 사용하면 뷰가 가지고 있는 subview들의 콘텐츠 사이즈를 딱 채운 크기를 ..
이미지 prefetch, 이미지 다운로드 SDWebImage를 사용하여 쉽게 prefetch, 이미지 다운로드가 가능 prefetch를 해놓으면 이미지를 memory, disk 캐싱해놓는데 큰 이미지나 즉각적으로 화면에 보여져야하는 이미지들은 prefetch해놓는것이 중요 SDWebImage의 캐싱 구현 코드 분석은 이전 포스팅 글 참고 이미지 prefetch 이미지를 관리할 때는 보통 로컬이 아닌 서버로부터 url을 받아서 이 url로 이미지를 띄워주는데, 이 때 url을 가지고 이미지를 바로 여러장을 띄워주려고 할때 시간이 오래 걸리는 문제가 존재 prefetch를 사용하면 SDWebImage에서 memory, disk 캐싱하여 효율적으로 이미지 표출이 가능 ImageManager라는 이름으로 pre..
safe area 경고 표출 보통 아래처럼 keyWindow로 구하면 warning 문구가 표출 // 'keyWindow' was deprecated in iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes let window = UIApplication.shared.keyWindow let safeAreaInsets = window?.safeAreaInsets iOS 13부터 Scene이라는 개념이 생겼는데, 이 scene에 접근해서 window를 가져와야함 safeAreaInset 구하는 방법 connectedScen..