일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Xcode
- swift documentation
- Refactoring
- UICollectionView
- combine
- Clean Code
- MVVM
- UITextView
- Human interface guide
- ribs
- tableView
- RxCocoa
- 클린 코드
- map
- uiscrollview
- rxswift
- 리펙터링
- swiftUI
- HIG
- 리팩토링
- ios
- 애니메이션
- SWIFT
- 리펙토링
- clean architecture
- 스위프트
- Protocol
- collectionview
- Observable
- uitableview
- Today
- Total
목록ios (1095)
김종권의 iOS 앱 개발 알아가기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cg4dpw/btraVoXE9p6/kCYyqnA4NkGPpNZqKK5IFK/img.gif)
MyDynamicView의 내부 컨텐츠(text)가 변할때 마다 컨텐츠를 감싸고 있는 view도 동시에 조정 class ViewController: UIViewController { lazy var myView: MyDynamicView = { let view = MyDynamicView() view.text = "123" return view }() override func viewDidLoad() { super.viewDidLoad() view.addSubview(myView) myView.center = view.center DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { self.myView.text = "1" self.myView.center ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cGVu6L/btraWTv38Zq/PeC4J4XK1neasgq86feUcK/img.png)
UILabel의 이해 UILabel은 초기에 frame.size를 지정해주지 않으면 width, height가 0으로 세팅 text의 내용이 있더라도 0으로 존재 // 텍스트에 무엇이 존재하던지 frame.size 값은 0으로 초기화 class ViewController: UIViewController { lazy var titleLabel: UILabel = { let label = UILabel() label.textColor = .black label.text = "초기 텍스트" return label }() override func viewDidLoad() { super.viewDidLoad() titleLabel.center = view.center print(titleLabel.frame.si..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/IWmmz/btraKD9ncob/zyhMZ5xtaIkLcCfdumewCK/img.png)
Overflow Operator 단순히 +, -로 접근하면 overflow 런타임 에러 발생 overflow operator 추가: &+ 빼기: &- 곱셈: &* ex) Int16의 범위는 -32768 ~ 32767 var potentialOverflow = Int16.max print(potentialOverflow) // 32767 potentialOverflow = potentialOverflow &+ 1 print(potentialOverflow) // -32768 Operator method 연산자 재정의: static func로 정의 struct Vectror2D { var x = 0.0, y = 0.0 } extension Vectror2D { static func + (left: Vectr..
Access Control 다른 소스 파일 또는 모듈의 코드에서 코드 부분에 대한 엑세스를 제한 코드의 구현 세부 정보를 숨기고 해당 코드에 엑세스하고 사용할 수 있는 기본 인터페이스를 지정 가능 모듈과 소스파일 구분 모듈: 배포 단위 프레임워크 또는 응용프래그램을 import로 다른 모듈로 가져올 수 있는 성격 소스파일: 단순히 소스코드 파일이므로 소스 파일에서 여러 유형에 대한 access control 정의가 가능 Access level open 모든 소스 파일에서 해당 level 접근 가능 + 모든 곳에서 서브클래싱 가능 public 모든 소스 파일에서 해당 level 접근 가능 + 같은 모듈 내에서만 서브클래싱 가능 internal (외부 모듈에서 코드 확인 불가) 같은 모듈 내에서만 접근 가능..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/brIwAf/btraCTpCWrB/NUK7jQLqoF6Q9ijnDSkJDK/img.png)
Memory Safety (메모리 안전) atomic: Swift는 메모리의 위치를 수정하는 코드가 해당 메모리에 독점적으로 액세스할 수 있도록 요구하여 동일한 메모리 영역에 다중 액세스가 충돌하지 않는 성질 메모리 Access conflicting 읽기 access, 쓰기 access // A write access to the memory where one is stored. var one = 1 // A read access from the memory where one is stored. print("We're number \(one)!") 메모리 access conflicting: 코드의 다른 부분이 동시에 메모리의 동일한 위치에 access하는 경우 발생 시간에 따라 같은 input을 주어도 ..
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 /..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/qrNhU/btraexPxfje/A0qaq7iNkBqpxptzKUUQh0/img.gif)
아이디어 stackView가 있고, stackView 안에 Button들이 존재 해당 Button들은 for문으로 정해준 개수만큼 생성되며, 배열로 참조되고 있는 형태 버튼들의 tag를 설정하여, 어떤 버튼이 눌렀는지 tag로 체크 후 tag이하를 갖는 인덱스들을 선택된 처리 BaseView 정의 class BaseView: UIView { override init(frame: CGRect) { super.init(frame: frame) configure() } @available(*, unavailable) required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } func configure() {} fu..
Generics 제네릭스를 사용하는 목적 유연하고 재사용 가능한 함수 작성 중복을 피하고 그 의도를 명확하고 추상적인 방식으로 표현하는 코드 작성 Generics으로 해결할 수 있는 문제 swap 함수 // non-generics func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } // generics func swapTwoValues(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA } generics를 사용하여 linked-list 구현 Node 정의 public class Node { var value: T va..