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

swift의 String 형 value type 특성 c, c++, java와는 다르게 string형에서 인덱스에 Int로 접근 불가 swift에서는 인덱스 값에 Int가 아닌 Index자료형이 위치 (swift는 Sring이 reference type이 아닌 value type이기 때문) let str = "1234" str[str.startIndex ..< str.endIndex] // 1234 Index값의 주의 사항: 위처럼 endIndex 값은 문자열 마지막이 아닌, 마지막 다음 문자열의 끝을 참조 String.Index 타입 Index타입이 따로 존재하며, 이것을 통해 문자열의 위치를 계산 String은 기본적으로 `self.startIndex`를 제공하므로 startIndex기준으로 떨어진 ..

switch문의 CaseIterable CaseIterable 프로토콜은 allCases라는 static var를 사용할 수 있도록 제공 사용 방법 예시 - api를 request했을 때 실패한 경우, 응답값을 받은 상태이고 그 응답값이 미리 정한 enum타입에 속하는지 확인 enum 타입 정의 (CaseIterable 프로토콜 적용) enum RequestFailType: String, CaseIterable { case unknown case network } api로 부터 failTypeId를 받은 상태 (테스트이므로 아래는 하드코딩) let failTypeId = "unknown" failTypeId가 정의한 enum타입에 속하는지 확인 - allCases는 enum의 모든 타입이 담겨진 배열 R..
"문자열".split(separator:) "12345".split(separator: "2") // ["1", "345"] "문자열".components(separatedBy:) separatedBy에 문자열을 넣고 실행하면, 문자열 중 separateBy에 속한 문자열을 제거한 배열로 반환 import Foundation "12345".components(separatedBy: "2") // ["1", "345"] ["문자열"].joined() 문자열 배열.joined(): 문자열 배열을 하나의 문자열로 만들어주는 함수 ["1", "234", "5"].joined() // "12345" // 동일 코드 ["1", "234", "5"].compactMap {$0} ["문자열"].joined(separa..
특정 문자열을 지정한 갯수만큼 추가하고 싶은 경우 for문을 쓰지 않고 스위프트 내장 함수 사용 String(repeating:count:) let strResult = String(repeating: "*", count: 5) print(strResult) // "*****"

cf) 오른쪽 스크롤 바 표출, flashScrollIndicators(): ios-development.tistory.com/341 상단 refresh (with RxCocoa) - UIRefreshControl 사용 (상단에 시스템에서 뿌려주는 로딩 UI 생성) 사용: 사용자 입장에서 tableView를 볼 때, 상단 refresh를 사용하는 경우는 tableView의 내용이 변한 경우에 사용 cf) 하단 refresh 사용: tableView를 밑으로 내려서 api로 부터 내용을 더 load하고 싶은 경우 사용 사용 방법: `UIRefreshControl` 객체를 선언한 후 이 객체를 tableView의 refreshControl로 등록 후 객체의 isRefreshing 값에 업데이트 UIRefre..
* keychain사용방법: KeychainAccess 프레임워크 사용 방법 참고 - ios-development.tistory.com/216 암호화 모듈 keychain에 저장된 문자열은 모두 외부에서 디바이스만 있다면 조회가 가능하기 때문에 암호화/복호화가 필수 SecureEnclave: prvate key를 이용하여 layer를 만들어 암호화하는 방법 앱에서는 BundleID를 가지고 암호화/복호화 Crypto 클래스 정의 import Foundation import Security class Crypto { static let privTag = Bundle.main.bundleIdentifier! static let SecureEnclaveAccess = SecAccessControlCreateW..

객체 지향 프로그래밍 3가지 요소를 반드시 지원하는 프로그래밍 방법 캡슐화(encapsulation), 상속(inheritance), 다형성(polymorphism), 다형성을 이용한 의존성 역전(dependency inversion) 사실생 캡슐화, 상속은 객체 지향 언어가 탄생하기 전부터 C에서도 존재 객체 지향 프로그래밍이란 다형성을 이용하여 시스템의 모든 소스 코드 의존성에 대한 절대적인 제어 권한을 획득할 수 있는 능력 (모듈의 독립성, 배포 독립성) 캡슐화 (= 은닉화) 데이터와 함수가 응집력 있게 구성된 집단을 서로 구분 짓는 선을 그을 수 있게끔 하는 개념 사용하는 쪽에서 멤버 변수들의 정보를 모르고 있어야 완전한 캡슐화 private, public으로 표현: 사용쪽에서 특정 구조체의 멤버..

특정 문자열에 해당하는 곳의 문자열 치환 replacingOccurrences(of:with:) 이용: self에서 of 문자열 부분을 with으로 변경 let sampleStr = "12345" let newStr = sampleStr.replacingOccurrences(of: "2", with: "vv") print(newStr) // 1vv345 Range값을 이용한 문자열 치환 replacingCharacters(in:with:) 이용: self에서 in 범위 부분을 with으로 변경 NSRange 개념: location, length 정보 가지고 있는 구조체 Range 개념: lowerBound, upperBound정보를 가지고 있는 구조체 range값을 가지고 문자열을 치환하는 예제) - t..