일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- swift documentation
- UITextView
- HIG
- 리펙토링
- 클린 코드
- Refactoring
- SWIFT
- 애니메이션
- Human interface guide
- Observable
- rxswift
- 리팩토링
- tableView
- 스위프트
- RxCocoa
- 리펙터링
- uitableview
- uiscrollview
- Protocol
- combine
- Clean Code
- Xcode
- UICollectionView
- MVVM
- swiftUI
- ribs
- clean architecture
- ios
- map
- collectionview
- Today
- Total
목록iOS 응용 (swift) (681)
김종권의 iOS 앱 개발 알아가기
* 추상화하기 목차: https://ios-development.tistory.com/1627 제네릭스의 목표 공통화, 추상화, 코드의 유연성 구체적인 내용은 이전 포스팅 글 참고 제네릭스 훑어보기 - 함수에 적용 함수에 적용 - 함수 이름 오른쪽에 꺽쇠를 사용하여 타입 표현 before) func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } func swapTwoStrings(_ a: inout String, _ b: inout String) { let temporaryA = a a = b b = temporaryA } func swapTwoDoubles(_ a: inout Double, _..
Existential Type 개념 * Existential: "존재하는" Existential Type는 protocol를 명시적으로 타입을 지정하는 경우, 그 protocol을 Existential Type이라고 명칭 ex) 아래 SomeProtocol을 Existential Type이라고 명칭 let instance: SomeProtocol = SomeClass() Existential Any 개념 Existential Type을 사용할 때, dynamic dispatch가 일어나고 적지않은 메모리 할당 등 비용이 비싼 단점이 존재하여 프로그래머에게 Existential Type을 사용할땐 주의하게끔 any 키워드를 붙여서 사용하라는 의미 (비용관련 내용) (any 키워드를 붙여야 하는 이유 - 실..
* 추상화하기 목차: https://ios-development.tistory.com/1627 추상화란? 복잡성을 숨기고 필요한 부분만을 노출시키는 것 특정한 타입에 의존하지 않고 일반화하여 작성 > 코드의 유연성과 재사용성 상승 추상화의 목적 추상화한다는 것은 일종의 DIP(Dependency Inversion Principle)의 목적과도 유사 DIP는 구현체에 의존하지 않고 인터페이스(protocol)에 의존하게끔하여, 구현체의 변경이 유연하게 가져갈 수 있다는 개념 DIP 구체적인 개념은 이전 포스팅 글 참고 코드의 유연성, 재사용성 상승 추상화의 종류 generics 사용 커스텀 뷰를 만들 때 Generics를 사용하여 값을 표현 class GenericInputView: UIView { var..
1. 추상화의 개념과 목적 2. 제네릭스로 추상화하기 3. 프로토콜에 제네릭스 사용하는 추상화 이해하기
시뮬레이터 분기 방법 #if targetEnvironment(simulator) 사용 #if targetEnvironment(simulator) print("simulator") #else print("no simulator") #endif 아키텍쳐, os 분기 방법 아키텍쳐는 arch() 사용, os는 os() 사용 os() 안에 넣을 수 있는 것 macOS, iOS, watchOS, tvOS, Linux, Windows, FreeBSD, Android, PS4 arch() 안에 넣을 수 있는 것 x86_64, arm, arm64, i386, powerpc64, powerpc64le, s390x ex) 사용 예시 // macOS 시뮬레이터 분기 #if (arch(i386) || arch(x86_64))..
nested protocol swift 5.10 아래 버전에서는 아래처럼 protocol을 struct/class/enum/actor/function 하위에 정의가 불가능 swift 5.10 이전에서 Delegate protocol을 만들려고하면 아래처럼 외부에 Delegate를 정의하고, 안에서도 접근할때 fullName으로 접근해야함 (TableView안에 protocol 정의가 가능하면 외부에서는 TableView.Delegate로 접근이 가능하고, 내부에서는 단순히Delegate 이름으로만 접근이 가능) class TableView: UIView { weak var delegate: TableViewDelegate } protocol TableViewDelegate { } swift 5.10부터는..
CustomStringConvertible 개념 해당 프로토콜을 준수하는 인스턴스에 설명을 붙일 수 있는데 여기에 사용되는 것 프로토콜을 보면 description 하나만 프로퍼티만 소유 public protocol CustomStringConvertible { var description: String { get } } print를 사용할때 내부적으로 이 description을 읽어서 print하는 것 enum A { case a case b } print(A.a) // "a" 만약 A에다가 CustomStringConvertible을 준수하면, description에 정의한 값으로 반환됨 enum A: CustomStringConvertible { case a case b var description..
ipa 파헤치기 아이디어 앱 바이너리 파일인 .ipa 형식의 파일을 준비 미국 국가안보국에서 만든 오픈소스 ghidra를 활용 (무료) ghidra로 .ipa파일을 읽고난 후 RAM에 있는 데이터들을 code로 변환하는것 ghidra 설치 JDK 11버전이 없다면 설치 https://docs.oracle.com/goldengate/1212/gg-winux/GDRAD/java.htm ghidra github의 release에서 ghidra_11.0_PUBLIC_20231222.zip 설치 ghidra_11.0_PUBLIC_20231222.zip 폴더로 이동 cd ghidra_11.0_PUBLIC_20231222.zip ghidra 실행 ./ghidrarun (terminal창에서 jdk 파일 위치를 물어보..