| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- UICollectionView
- combine
- Protocol
- RxCocoa
- Xcode
- MVVM
- 애니메이션
- swift documentation
- UITextView
- scrollview
- clean architecture
- collectionview
- uitableview
- 리팩토링
- map
- ribs
- tableView
- Refactoring
- 리펙토링
- Human interface guide
- rxswift
- swiftUI
- uiscrollview
- Observable
- ios
- 스위프트
- Clean Code
- SWIFT
- HIG
- 클린 코드
- Today
- Total
목록ios (1132)
김종권의 iOS 앱 개발 알아가기
결합 연산자2차원 배열을 1차원 배열로 만들 때, 3가지의 연산자 사용이 가능var a = [[1, 2], [3], [4, 5]]let a_1 = a.flatMap { $0 }let a_2 = a.reduce([], +)let a_3 = Array(a.joined())// [1, 2, 3, 4, 5]하지만 여기서 reduce 연산자를 사용하면 O(n^2)의 비용이 들고 flatMap, joined를 사용하면 O(n) 비용이 들기때문에 reduce를 지양할 것reduce를 사용했을때 O(n^2) 비용이 드는 이유3*3 배열일때 예시var b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]초기 상태 = []첫번째 배열 순회하면서 append: [[1, 2, 3]]누적 연산 카운트: 3두번째 ..
* Synthetic Sugar: 결과는 같지만, 코드를 조금 더 단순하게 표현하는 것Optional 타입에 map 사용하기보통 map 함수를 배열과 같은곳에 원소를 하나씩 돌면서 변화를 줄 때 사용let items = [1,2,3,4,5]let itemsWithPlusOne = items.map { $0 + 1 }하지만 Optional 타입에도 map을 사용이 가능Swift 코드를 보면 Optional에 map 함수가 정의Optional인 타입의 메소드이며, 이 map을 사용하면 Optional을 벗겨낸 값을 map의 클로저로 전달한 인수로 들어가는 것@frozen public enum Optional : ExpressibleByNilLiteral { @inlinable public func ma..
그라데이션 주는 방법Swift에서 그라데이션을 주려면 뷰의 layer에 CAGradientLayer을 추가하여 적용 필요때문에 그라데이션 효과를 주는 CAGradientLayer와 이것을 UIView가 필요let gradationView = UIView()let gradientLayer = CAGradientLayer()gradientView.layer.addSublayer(gradientLayer)또 layoutSubviews와 같은 화면의 크기가 결정되었을때 호출되는 시점에 gradientLayer의 frame 업데이트가 필요override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() gradientLayer.frame = g..
@State를 사용하면 mutating 없이도 사용이 가능아래처럼 @State를 프로퍼티에 붙여서 사용하면 change()함수에서 mutating 키워드가 없더라도 문제없이 동작struct MyStruct { @State var val = 0 func change() { val = 0 }}struct이기 때문에 값을 변경하려면 원래 mutating키워드가 필요하지만 @State를 사용하면 mutating 없이 사용이 가능struct MyStruct { var a1 = 0 func change() { a1 = 2 // Cannot assign to property: 'self' is immutable }}computed property..
셀이 탭 되었을때 애니메이션 넣는 방법터치 이벤트는 tableView의 Delegate 메서드인 didSelectRowAt에서 받을 수 있는데, 여기서 특정 셀을 캐스팅해서 터치 애니메이션 실행이 가능(애니메이션은 셀이 탭 되었을때 셀이 가지고 있는 메서드를 실행시키고, 셀 안에서 UIView.animate로 애니메이션처리)(애니메이션 적용은 쉽기 때문에 이 포스팅 글에서는 생략)func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at: indexPath) as? CustomCellType1 cell?.didTapCell()}하지만 이렇게하면 확장..
headerView 색상headerView의 색상 backgroundColor를 아래처럼 clear라고 설정한 상태에서, 스크롤 하여 header가 sticky될때 색상이 자동으로 lightGray색상으로 변함import UIKitclass HeaderView: UITableViewHeaderFooterView { ... override init(reuseIdentifier: String?) { super.init(reuseIdentifier: reuseIdentifier) contentView.backgroundColor = .clear // tableView의 스타일 중 디폴트인, plain상태에서는 위처럼 보이고 grouped 상태에서는 아래처럼 backg..
문자열 합치는 방법대표적으로 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...