일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트
- uitableview
- Protocol
- 클린 코드
- map
- UITextView
- RxCocoa
- clean architecture
- Refactoring
- SWIFT
- Observable
- rxswift
- ios
- collectionview
- Clean Code
- MVVM
- UICollectionView
- 리펙토링
- swiftUI
- ribs
- combine
- 리팩토링
- Xcode
- 애니메이션
- Human interface guide
- uiscrollview
- HIG
- 리펙터링
- tableView
- swift documentation
- Today
- Total
목록iOS 기본 (swift) (149)
김종권의 iOS 앱 개발 알아가기
스위프트에서의 layoutMagins 개념 현재 뷰의 경계와 content와의 여백 개념 혼동 주의: 현재 뷰 경계와 superview와의 여백이 아님을 주의 storyboard에서 layoutMargins 확인 방법 Editor > Canvas >Layout Rectangles layout 설정 시 "Constrain to margins" 옵션을 체크한 후 autolayout적용 시 view 내부에 margin값을 고려한 배치 cf) code에서 layoutMarginsGuide 주는 방법: layoutMarginsGuide. 으로 접근 imageView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor) 내부 label이 margi..
Hash란? hashing: 임의의 길이를 갖는 데이터(key)를 고정된 길이의 데이터(value)로 매핑하는 의미 hash function: key > value 매핑하는 함수 hash code: index값 hash value: hash code에 해당되는 value 값 collision(충돌) chaining으로 해결: hash function을 통해 얻은 hash code값에 이미 데이터가 존재하는 경우 > linked list를 통해 저장 LInear Probing으로 해결: hash code += 1 이동 Rehashing: Hash Table Hashable Hashing 기능 프로토콜 - 임의의 길이를 갖는 데이터(key)를 고정된 길이의 데이터(value)로 매핑 사용 Dictionary..
setContentHuggingPriority 뷰가 고유 크기보다 커지는 것을 방지하기위해 우선 순위를 설정하는것 커지지 않게 하다 = "Hugging" setContentCompressionResistancePriority 뷰가 고유 크기보다 작게 되는것을 방지하기위해 우선 순위를 설정하는것 작게 되지 않게 하다 = "CompressionResistance" 예제 StackView안에 lable2개가 있지만 stackView의 너비가 autolayout으로 잡혀있지 않아서 동적으로 늘어나는 경우는 필요없는 상황 StackView의 너비가 정해진 상황 > stackView의 alignment = .fill이 디폴트설정되어 있으므로, 두 label이 커져야 하는데, 어떤것을 고유 크기보다 커지지 않도록 ..
AutoresizingMask superview의 bounds가 변경될때 subview의 크기를 어떻게 크기를 재설정 할것인가에 대한 bit mask bit mask: 컴퓨터의 언어인 이진수를 사용하면 연산이 빠른점을 이용해 어떤 정수를 이준수 형태로 표현하여 자료구조로써 사용하는 기법 원리: view의 bounds가 변경되면 subview들을 각 subview의 autoresizing mask에 해당되는 부분을 자동으로 재설정 UIView.AutoresizingMask에 설명된 상수를 결합하여 값을 조정 default값은 flexibleWidth와 flexibleRightMargin 상수가 포함되어 있지만, flexibleLeftMargin상수는 포함되어 있지않기 때문에 뷰가 왼쪽에 고정되어 있는 것으..
if 문에서 제공하는 unwrapping 조건문에서 제공하는 unwrapping을 사용하지 않은 경우 var b1: Bool? = true if let unwrppedB1 = b1, unwrppedB1 { print("true b1") } else { print("false b1") } // true b1 조건문에서 제공하는 unwrapping 사용한 경우 바로 b1 == true로 optional 타입이라도 자동으로 unwrapping if b1 == true { print("true1 b1") } else { print("false1 b2") } Bool타입이 아닌 다른 타입도 적용 가능 var integer1: Int? = 1 if integer1 == 1 { print("integer1 is on..
URL이란? URL vs URI 개념 참고 URLSession 을 알아야하는 이유 swift에서 HTTP를 이용한 네트워크 사용 방법을 이해 Alamofire, Moya 모두 URLSession을 wrapping한것뿐 testable 코드를 만들 경우 URLSession을 알면 더욱 작성하기 용이 Alamofire, Moya를 사용할 때 오류나 특정 log에 대한것을 이해하려면 URLSession을 알고 있어야 용이 URLSession이란 앱과 서버간에 데이터를 주고받기 위해서 HTTP 사용 URLSession은 URLSessionConfiguration을 통해 생성하고 URLSession은 여러 개의 URLSessionDataTask를 생성하여 이를 통해 서버와의 통신을 하고 Delegate를 통해 네..
Compueted Property Concept: 객체의 다른 property가 변경 될 수 없고, 다른 속성이 변경되지 않으면 다른 시간에 계산된 property 값은 동일한 출력을 제공 시간 복잡도가 O(1) 어떤 예외도 throw하지 않는 경우 계산 비용이 저렴 ex) struct Point { var x = 0.0, y = 0.0 } struct Size { var width = 0.0, height = 0.0 } struct Rect { var origin = Point() var size = Size() var center: Point { get { let centerX = origin.x + (size.width / 2) let centerY = origin.y + (size.height /..
View를 추가하고 삭제 addSubview(_ view: UIView): child view로 추가할때 사용 removeFromSuperview(): child view를 삭제할때 사용 let myView = UIView() view.addSubview(myView) myView.removeFromSuperview() ViewController를 추가하고 삭제 추가 childViewController.didMove(toParent): UIViewController에 정의되어 있는 메서드이며, childVC가 추가될때 didMove가 불려지도록 설계가 되고 있으므로 추가되는 상황에서 호출 // ChildViewController 추가 addChild(vc) containerView.addSubview(v..