일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- combine
- uiscrollview
- Refactoring
- collectionview
- 리펙토링
- Observable
- 애니메이션
- tableView
- MVVM
- SWIFT
- swift documentation
- 리펙터링
- rxswift
- 클린 코드
- Clean Code
- Protocol
- UICollectionView
- ribs
- HIG
- Xcode
- clean architecture
- map
- 리팩토링
- 스위프트
- Human interface guide
- UITextView
- ios
- swiftUI
- RxCocoa
- Today
- Total
목록분류 전체보기 (1634)
김종권의 iOS 앱 개발 알아가기
문자열 합치는 방법대표적으로 joined와 reduce가 존재joined는 String 배열일 때 separator를 넣어주면서 합쳐주는 기능extension Array where Element == String { public func joined(separator: String = "") -> String}reduce는 collection type으로 정의되어 있고 컬렉션을 iteration하면서 합쳐주는 기능@frozen public struct Array { @inlinable public func reduce(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows ..
overlay 주는 방법보통 아래와 같은 뷰가 있을 때, 아래 뷰에 흰색을 섞고 싶은 경우?보통은 black색상에 alpha값을 낮추어 위에 올리는 형태로하는데, 이 방법 외에도 색상을 혼합할 수 있는 방법이 존재compositioningFilter 개념compositioningFilter는 CALayer의 프로퍼티이며, 이 값을 사용하여 계층상 이 layer 앞에 있는 뷰와의 혼합이 가능아래처럼 overlayView를 만들고, 이 layer의 compositingFilter에 "screenBlendMode"를 입력해주고 이 뷰를 addSubview하면 색상이 혼합됨let overlayView = UIView()overlayView.backgroundColor = .lightGrayoverlayView...
낮은 수준의 성능을 야기하는 요소 4가지1) Function call - 최적화 되지 않은 많은 함수 호출2) Memory allocation - 메모리 할당에 너무 많은 시간을 소비3) Memory layout - 데이터가 표현되는 방식 때문에 많은 시간이나 메모리 낭비4) Value copying - 불필요하게 값을 복사하고 파괴하는데 많은 시간을 소비* 1), 2)번 내용은 이전 포스팅 참고3) Memory layoutmemory layout이란?메모리를 할당한 후 해당 메모리를 사용하여 값을 저장하는 방법메모리 에서의 representaion이라는 개념representation은 메모리 안에서 value를 어떻게 바라보는가를 의미아래 코드에서 array는 메모리 관점에서 "두 개의 double 값..
Swift에서 Collection 타입은 모두 value 타입reference type은 다중 스레드 환경에서 동기화 문제와 Data race 문제를 발생시키므로 value타입으로 관리하는것이 더욱 용이하기 때문에, Collection 타입은 value type으로 설계하지만 아래 코드처럼 reference 타입을 value 타입으로 감싼 것 뿐이며, struct 내부도 모두 value type이 아님class SomeClass {}struct SomeStruct { let c = SomeClass()}내부도 모두 value type으로 구성하면 비용이 발생하는데, 아래에서 계속 설명Large structs의 복사 방식 특징 2가지아래처럼 person을 복사할 때 내부적으로 비용이 많이 발생let ..
value를 사용할때의 ownershipvalue를 사용하면 어떻게든 소유권 시스템을 갖음var array = [1,2,3] // array는 [1,2,3]에 관한 소유권을 갖음소유권 시스템값을 소비(consume)하거나 변경하거나(mutate) 빌리는(borrow) 것Consuming values 개념representation의 소유권을 한고셍서 다른 곳으로 이전한다는 의미value를 넘길때 consuming 파라미터를 사용하여 구현ex) 아래 코드에서 발생하는 consuming 이해하기array에 값을 assign할 때, 초기 값의 소유권을 array 변수로 이전함array입장에서 초기값의 소유권을 갖게되므로 "consuming" 함func makeArray() { var array = [1.0, ..
낮은 수준의 성능을 야기하는 요소 4가지1) Function call - 최적화 되지 않은 많은 함수 호출2) Memory allocation - 메모리 할당에 너무 많은 시간을 소비3) Memory layout - 데이터가 표현되는 방식 때문에 많은 시간이나 메모리 낭비4) Value copying - 불필요하게 값을 복사하고 파괴하는데 많은 시간을 소비-> Swift perfomance는 대부분 위 4가지 비용 중 하나 이상에 영향을 미침성능 1) Function call무의식적으로 사용하는 코드중 성능에 영향을 주는 Function call 요소인수, 함수의 주소, 메모리 로컬 상태에 함수 정보 할당Call dispatchstatic dispatch: 컴파일 타임에 우리가 호출하는 함수를 정확히 알..
Multiline String Literal 개념문자열을 표시할 때 따옴표 3개로 표현하는 것label.text = """abcdef ab123456가나다라"""이 방법을 사용할 때 가끔 indent에 대해서 헷갈리는 경우가 있는데, indent는 끝 따옴표 """의 시작 지점이 0 indent라는 것을 알기ex) 아래 코드들 모두 화면에서는 동일하게 보임 label.text = """abcdef ab123456가나다라"""label.text = """abcdef ab123456가나다라"""label.text = """ abcdef ab 123456 가나다라 """만약 마지막 """ 따옴표를 기준으로 칸이 띄어져 있으면 그만큼 indent가..
Widgets and Live Activities기존에 iOS에만 있던 Live Activities 기능이 watchOS에서도 추가됨iOS 기반의 Live Activities가 자동으로 Apple Watch에 표출supplementalActivityFamilies에 small과 medium을 적용하여 watchOS에서 한 번에 더 많은 가사를 표출custom containers - 새로운 ForEach(subviewOf:)ForEach의 새로운 API인 ForEach(subviewOf:)를 사용하면 재귀적으로 하위뷰를 접근하여, 계속 뷰가 위에 쌓이는 UI구현이 가능 * container 관련 UI 구체적인 개념은 WWDC24 Demystify SwiftUI containers 참고Ease of use ..