일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- scrollview
- tableView
- 리펙토링
- ribs
- Protocol
- Refactoring
- SWIFT
- Xcode
- uitableview
- Observable
- swiftUI
- combine
- UICollectionView
- UITextView
- HIG
- 애니메이션
- ios
- 스위프트
- clean architecture
- 클린 코드
- uiscrollview
- Human interface guide
- MVVM
- RxCocoa
- swift documentation
- collectionview
- 리팩토링
- rxswift
- map
- Clean Code
- Today
- Total
목록iOS 응용 (swift) (727)
김종권의 iOS 앱 개발 알아가기

SMS message filters 란?알 수 없는 발신자로부터 메시지를 받았을 때, 메시지를 가로채어, 메시지가 어떤 유형인지 분류해줄 수 있는 것"SMS Filter"라는 앱을 만들었을때, 여기에 SMS message filters 기능을 넣으면 iOS 메시지 앱에서 필터링 방법 리스트 중 노출됨응용하여 스미싱 보안 앱에서 이 기능을 적용해놓고, 스미싱 문자가 왔을 때 이 문자가 사기라는 것을 push 알림으로 보내줄 수 있음참고) iOS는 알 수 없는 사람이 보낸 메시지를 필터링하는 옵션을 메시지 iOS 앱에서 제공은 하고 있음iOS 16에서 향상된 기능iOS 16부터는 메시지를 12개의 하위 범주로 분류가 가능메시지 필터 처리하는 과정"SMS Filter"라는 앱에 Message Filter a..

Xcode에서 시뮬레이터가 보이지 않을 때Xcode에서 다른 버전 혹은 다른 시뮬레이터를 설치했는데, 목록에 보이지 않는 경우가 존재기기 보이게 하는 방법디바이스의 iOS버전에 맞게 Minimum Deployments가 낮게 설정되었는지 확인Minimum Deployments을 iOS 17에서 iOS 14로 낮추니 여러가지 디바이스가 등장하지만 아직 원하는 iPhone SE1기기가 보이지 않음"Manage Run Destinations..." 클릭시뮬레이터 탭에도 iPhone SE1이 보이지 않음+ 버튼을 눌러서 추가만약 아래처럼 "could not create iPhone SE..."가 나오면 시뮬레이터를 설치해야함시뮬레이터 설치 방법"CMD + ," 단축키 > Platforms 탭 클릭 > 좌측 하단..

문자열 bullet 기준 들여쓰기 UIbullet기준으로 텍스트들이 들여쓰기 되어있는 UI폰트가 큰 경우에도 들여쓰기 기준 동일)let text = """• 첫 번째 텍스트 이빈다. 이것은 bullet 테스트, 과연 긴 텍스트가 있을 때 indent가 어떻게 적용될 것인가 테스트 해봅니다. iOS 앱 블로그 알아가기 jake에서 살펴봅니다.• 두 번째 텍스트 입니다."""문자열 bullet 기준 들여쓰기 구현 아이디어뷰와 UILabel 준비import UIKitclass ViewController: UIViewController { private let label = { let l = UILabel() l.font = .systemFont(ofSize: 30) ..

UITableView 데이터 추가하기UITableView에서 스크롤하면서 동시에 아래에 데이터를 계속해서 추가해주어야하는 페이지네이션 UI가 존재페이지네이션 UI 구현 방법은 이전 포스팅 글 참고 [iOS - swift] UITableView 하단 로딩 구현 방법 (#페이지네이션, footer loading, UIActivityIndicatorView)하단 로딩 구현 아이디어1단계) Pagination: tableView의 willDisplay 델리게이트에서 마지막 인덱스 값인지 체크하고, 마지막 인덱스 값이면 페이지네이션 구현2단계) 하단로딩: willDisplay에서 페이지네이ios-development.tistory.comex) 페이징 관련 코드마지막 셀이 보여질 때 로딩 뷰, footerView를..
struct, class 메모리 저장 위치strucrt는 보통 메모리에서 stack영역에, class는 heap영역이 저장되는데, 아래처럼 struct안에 class 타입이 있을때 이것은 어디에 저장될 것인가?class SomeClass { var value: Int init(value: Int) { self.value = value }}struct SomeStruct { var classInstance: SomeClass var otherValue: Int}결론은 SomeStruct는 stack영역에 저장되고, SomeStruct의 class타입인 프로퍼티 classInstance는 heap영역에 저장됨메모리 위치 알아내기swift에서 heap과 stack영역의 ..
결합 연산자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..