일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HIG
- uitableview
- ribs
- Clean Code
- combine
- swiftUI
- collectionview
- tableView
- 리펙터링
- 클린 코드
- 스위프트
- Human interface guide
- Protocol
- Xcode
- map
- MVVM
- uiscrollview
- swift documentation
- ios
- UICollectionView
- 리펙토링
- 애니메이션
- SWIFT
- RxCocoa
- clean architecture
- 리팩토링
- rxswift
- Observable
- UITextView
- Refactoring
- Today
- Total
목록2024/05 (9)
김종권의 iOS 앱 개발 알아가기
콘페티 효과콘페티 효과를 구현하려면 CAEmitterCell과 CAEmitterLayer를 사용하여 구현폭죽 효과눈 효과 CAEmitterCell, CAEmitterLayer 개념CAEmitterCell을 CAEmitterLayer에 추가하고, layer에서 위치를 정한다음 view.layer.addSublayer에 추가하여 구현CAEmitterCell로 파티클에 들어갈 하나하나의 요소의 속성값을 정하고, CAEmitterLayer에 이 emitterCell을 주입해주는 것let emitterCell = (CAEmitterCell 인스턴스)let emitterLayer = CAEmitterLayer()emitterLayer.emitterPosition = CGPoint(x: view.bounds.midX..
Saturation (채도)가끔 dimmed 효과를 주기 위해서 일반 이미지에 CIFilter를 사용하여 채도를 낮추는 코드(하지만 iOS 17에서 위젯 관련 버그가 존재)ex) CIFilter를 활용한 채도를 변화시키는 메소드// 출처: https://stackoverflow.com/questions/62040870/how-can-we-decrease-saturation-of-uiview-in-swiftextension UIImage { func withSaturationAdjustment(byVal: CGFloat) -> UIImage { guard let cgImage = self.cgImage else { return self } guard let filter = C..
1. noncopyable, ~Copyable - 개념 (Swift 5.9+, owner, ownership, 최적화)2. noncopyable, ~Copyable - 연산자 (borrowing, inout, consuming)~Copyable 연산자~Copyable을 사용하고 이 instance를 함수에서 주고 받을 때, 파라미터에 아무런 키워드를 사용하지 않으면 컴파일 에러가 발생struct A: ~Copyable { var age: Int deinit { print("deinit: A") }}class ViewController: UIViewController { var a = A(age: 1) override func viewDidLoad() ..
1. noncopyable, ~Copyable - 개념 (Swift 5.9+, owner, ownership, 최적화)2. noncopyable, ~Copyable - 연산자 (borrowing, inout, consuming)noncopyable, ~Copyable 이란?Swift5.9에서 탄생struct SomeStruct: ~Copyable { var name: String}enum SomeEnum: ~Copyable { case a}swift5.9 이전 swift 모든 타입들은 모두 copyable 타입 noncopyable은 swift5.9에서 enum과 struct에 적용 가능하도록 등장class 타입은 deinit이 있어서 이 deinit을 활용할 수 있지만, struct와 enu..
consume 개념swift5.9+"consume" 의미 그대로 lifetime을 중지한다는 의미a라는 프로퍼티를 consume 시키면사용하지 못함 (컴파일 에러 발생)var a = [1,2,3]var b = consume aprint(a) // 'a' used after consume프로퍼티를 copy하거나 write할때 최적화하기 위해 consume이 탄생일반적으로 CoW라고 명칭데이터를 복사하는 대신에 필요한 시점에서만 복사를 하기 때문에 메모리를 효율적으로 사용주로 대용량 데이터나 공유 자원을 다룰 때 유용ex) CoW 개념var b = a를 시도할때, b는 a의 데이터를 참조하고 있다가, 만약 b의 수정사항이 될땐 (b = 1), b가 자체 복사본을 만들어서 1의 값으로 변경하는 것메모리를 효..
1. 클로저를 사용할 때 주의할 점 - Memory Leaks, Retain Cycle, nested closure 첫 번째2. 클로저를 사용할 때 주의할 점 - nested closure 두 번째nested closure에서의 memory leak첫 번째 글에서 알아보았듯이, nest closure가 있을 때 외부 클로저가 아닌 내부 클로저에서 [weak self]를 잡게되면 메모리 릭이 발생// retain cycleclass Jake3 { let name = "Jake3" var closure: (() -> ())? var closure2: (() -> ())? init() { let outerClosure = { let internalC..
@Sendable 개념Sendable이라는 의미는 "전달 할 수 있는"이라는 의미이지만, 생략된 의미가 존재@Sendable는 불변성을 보장하는 "전달 할 수 있는"의 의미로 사용동시성 프로그래밍에서 핵심은 프로퍼티들의 '불변성'을 유지하는 것프로퍼티들이 '불변성'을 만족한다면, 동시성 프로그래밍에서 쉽게 파라미터, 클로저 등에 넘겨서 처리하는 것에 race condition, dead lock, memory conflict 등의 문제등을 신경쓰지 않고 편하게 프로그래밍이 가능@Sendable의 목적은 값을 변경할 수 없도록 강제화하는것예제특정 closure가 있을 때 이 closure에서는 전역변수인 age값 수정이 가능class ViewController: UIViewController { va..
@State, @Bindable 이란?@State 개념양방향 바인딩 (프로퍼티 뷰)@State는 Property wrapper로 구현되었으며 뷰의 상태를 표시해줄 목적으로 있는 키워드이 키워드로 프로퍼티를 선언하고 이 키워드를 뷰에 입력해주면, 이 프로퍼티가 변경되면 자동으로 뷰도 변경됨ex) string이라는 프로퍼티를 @State로 선언하고, 이 프로퍼티를 Text(string)으로 Text 뷰에 넣어준 후, string 프로퍼티 값을 변경해주면 자동으로 Text뷰에 반영됨import SwiftUIstruct ContentView: View { @State var string = "..." var body: some View { VStac..