일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- swift documentation
- MVVM
- uitableview
- collectionview
- uiscrollview
- RxCocoa
- UICollectionView
- Protocol
- tableView
- Human interface guide
- Clean Code
- ios
- 리팩토링
- HIG
- 클린 코드
- combine
- UITextView
- ribs
- 리펙토링
- 리펙터링
- rxswift
- clean architecture
- Refactoring
- 애니메이션
- map
- Xcode
- Observable
- 스위프트
- swiftUI
- Today
- Total
목록iOS 응용 (swift) (724)
김종권의 iOS 앱 개발 알아가기
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 파일 위치를 물어보..
Optional에서의 map, flatMap 개념 보통 map, flatMap은 Collection Type에서 사용하지만, Optional 내부를 보면 함수로 map, flatMap이 존재 @frozen public enum Optional : ExpressibleByNilLiteral { case none case some(Wrapped) @inlinable public func map(_ transform: (Wrapped) throws -> U) rethrows -> U? @inlinable public func flatMap(_ transform: (Wrapped) throws -> U?) rethrows -> U? } map 개념 Optional 타입에 nil이 아닌 값이라면, Optional..
UIKit framework 저장 경로 find 명령어를 통해 탐색 % find /Applications/Xcode.app -name UIKit.framework 탐색 결과 /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/UIKit.framework /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework /Applications/Xco..
Optional 타입 Optional 타입은 제네릭스를 받고, 그 제네릭스는 Optional 안에 감싼 값을 의미 Optional 타입은 enum이며, 2개의 case가 존재 none: 값이 없는 case some(Wrapped): 값이 있는 case enum Optional: ExpressibleByNilLiteral { case none case some(Wrapped) } 조건문에서 unwrap 방법 .some으로 접근 변수?로 접근 let optionalString = Optional("jake") switch optionalString { case .none: print("this is nil") case let .some(value): print("some value = ", value) } ..
over가 붙은 것과 붙지 않은 것의 차이 over가 붙은 것은 띄우는 VC의 view들을 날리지 않고 바로 띄우는 것이고, over가 붙지 않으면 띄우는 VC의 뷰들을 날림 파란색 VC를 fullScreen로 띄운 경우 이전에 있던 UIView들을 날림 (아래 사진에서 두 개의 UITransitionView가 있을 때, 첫 번째 UITransitionView의 UIDropShadowView의 View들이 날아감) 파란색 VC를 overFullScreen으로 띄운 경우 파란색 VC앞에 있던 뷰들이 사라지지 않고 유지되어 있음 -over를 붙이면 앞전의 view들이 사라있고, -over를 붙이지 않으면 view들이 사라짐 -> 띄울 VC에서 viewWillAppear 프린트를 찍을때, 파란색 VC를 dis..
디버깅 UserDefaults 간편 세팅 앱을 실행할때마다 특정 UserDefaults값을 매번 세팅해주고 싶은 경우? Arguments Passed On Launch 사용하면 UserDefaults에 항상 입력한 값으로 초기화가 가능 Xcode > Edit Scheme 클릭 왼쪽 탭에서 Run 선택 > 위 탭에서 Arguments 선택 > Arguments Passed On Launch > +버튼 클릭 - 짝대기를 붙이고, userDefaults에 저장될 이름을 입력하고난 후 공백을 두고 값 입력 -{name} {value} 사용할때 userDefaults로 접근이 가능 접근할떄는 - 짝대기를 제외한 이름으로 접근 class ViewController: UIViewController { override..