일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tableView
- Xcode
- 리펙토링
- uiscrollview
- UITextView
- 스위프트
- UICollectionView
- SWIFT
- clean architecture
- collectionview
- swift documentation
- Protocol
- RxCocoa
- Clean Code
- Observable
- ios
- swiftUI
- 애니메이션
- HIG
- Human interface guide
- 클린 코드
- combine
- 리펙터링
- Refactoring
- map
- 리팩토링
- uitableview
- ribs
- MVVM
- rxswift
- Today
- Total
목록SWIFT (948)
김종권의 iOS 앱 개발 알아가기
1. 테이블 뷰가 나온 배경 - 방대한 콘텐츠를 표현하기 위함 - 테이블 뷰의 완성 = 테이블 뷰 + 섹션1(테이블 뷰 셀 + 콘텐츠 뷰) + 섹션2(테이블 뷰 셀 + 콘텐츠 뷰) + 섹션n(...) 2. 일반적인 테이블 뷰 - 테이블 뷰 셀의 종류 : Basic, Right Detail, Left Detail, Subtitle, Custom 1) 테이블 뷰 생성 : UITableViewController - 통째로 테이블 뷰 생성 : 스토리보드에서 UITablewView 드래그엔 드롭 cf) UITableViewController가 아닌, UIViewController에서 테이블 뷰 생성 : (1) ~ (4)작업 (delegate, datasource, table view 각 추가) (1) "Table..
*소스코드 출처 : 꼼꼼한 재은씨의 스위프트 기본편 1. 직접 전달 방식 (동기 방식) - 자료형은 NSMutableDictionary을 쓰는게 가장 전달받기 쉬움 1) 프레젠테이션 방식 & 네비게이션 컨트롤러 방식 (인스턴스화 할 때 다운캐스팅 해줘야 하는 것 주의) 1 2 3 4 5 6 7 8 9 10 11 12 // VC1 class ViewController: UIViewController { var text = "이것이 넘겨질 데이터 내용" @IBAction func onClick(_ sender: Any) { guard let rvc = self.storyboard?.instantiateViewController(identifier: "RVC") as? ResultViewController e..
1. 예외 처리 필요한 이유 - optional타입은 오류가 발생했을 때 오류에 대한 정보를 외부로 전달할 방법이 없음 2. 구현 방법 - 함수가 반환할 오류는 일관된 주제와 연관된 경우(문자열이 있을 때, 문자열 크기, 문자열 형식, 문자열 포멧형식 등의 체크) - 일관된 주제를 표현하기에 가장 좋은 것은 enum형 타입 1) enum에 오류타입명 정의 // enum형으로 error타입명 정의 ( 프로토콜을 구현한 것은 오류 타입으로 사용하라는 일종의 가독성 표시 ) enum DateParseError : Error { case overSizeString case incorrectData(part: String) } 2) 오류가 나는 조건을 명시 : throws와 throw로 선언 - 오류가 발생할 수..
1. Delegate Pattern : 프로토콜을 쓰는 대표적인 이유 - 각종 이벤트를 효율적으로 관리하기 위해 대리자를 지정하여 이벤트 처리를 위임하고, 이벤트 발생시 위임된 대리자가 콜백 메소드를 호출하는 설계 패턴 * protocol : 명세 - protocol입장에서 구현 하는 객체가 어떤 객체인지 상관없고, "날 구현하여 특정 일을 시행하라"라는 의미 - 클래스는 단일 상속이기때문에 protocol이 나온 것 2. 프로토콜 생성 1) 프로토콜 프로퍼티 : 연산 프로퍼티만 가능하며 get, set유무만 표현 2) 프로토콜 메소드 : 구현부만 빼고 그대로 작성 1 2 3 4 5 6 7 8 9 10 11 // 프로토콜 프로퍼티 protocol myProtocol { var a: String {get ..
1. 열거형 - 열거형을 이용하여 데이터 타입을 정의하면 컴파일 오류로 찾아내는데 용이 ( 배열과 같은 집단 자료형은 런타임 오류 발생) 1) 사용방법 1 2 3 4 5 6 7 8 9 enum MyEnum { case ABC case B case C, D } let a = MyEnum.ABC print(a) // ABC let b: MyEnum = .B // 열거형을 선언시, 생략하여 사용 가능 - 타입이 지정된 enum : 값에 접근하는 경우는 rawValue로 접근 1 2 3 4 5 6 7 8 9 10 enum MyEnum: Int { case ABC = 123 case B = 2 case C = 4 } let a: MyEnum = .ABC print(a) // ABC print(a.rawValue)..
1. 특성 - 단일 상속만 지원 ※ protocol은 다중 구현 가능 1 2 3 4 5 6 7 8 import UIKit class C1{ } class C2: C1, UIContentContainer, UIAppearanceContainer{ // 다중 구현한 protocol과 단일 상속한 C1구별 } 2. 오버라이딩 - override키워드 붙임 - 메서드 뿐만 아니라 연산프로퍼티 변수 또한 오버라이딩 가능 - 수정 할 수 있는 변수로 하려면 역시, set키워드 넣을 것 - didSet, willSet이용 가능 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import UIKit class Machine{ var name: String = ..
1. 클로저표현식 : 익명함수, 주변 환경으로부터 값을 "캡쳐"(휘발성인 지역변수의 값이 저장되는 것)할 수 있는 경량 문법 즉, 클로저라는 것은 리턴된 타입(어떤 함수의 종료)을 참조할 때, 함수가 이미 종료된 시점에서 특정 변수를 참조하는 것 - 클로저표현식은 익명함수로 생각하면 편함 - func키워드, 함수이름 제거한 후 나머지만 표현 1) 기본 사용법 // 대입 후 실행 let a = { (v1: Int, v2: Int) -> Void in print("value1 = \(v1), value2 = \(v2)") } a(1,2) // 바로 실행 ({ (v1: Int, v2: Int) -> Void in print("value1 = \(v1), value2 = \(v2)") }) 2) 생략 // 정..
1. 함수 - 인자레이블 : 매개변수 이름 1 2 3 4 5 6 7 8 9 10 func myFunc(myValue: Int, myValue2: Int) -> (String, Int) { var ret : (String, Int) = (String(myValue + myValue2)!, myValue1) return ret } // myValue, myValue2가 인수레이블 myFunc(myValue: 123, myValue2: 13) // 함수호출방법 1 myFunc(myValue:myValue2:)(123, 13) //함수호출방법 2 - 위에서 함수 이름은, myFunc(myValue:myValue2) - defer 블록 : 함수안에서 return을 만나기 전에 defer블록을 만나게 되면, ret..