개발/Swift
-
GCD - DispatchQueue Main/Global 큐 스레드에 관해개발/Swift 2021. 11. 23. 18:07
메인스레드에 몰린 일들을 여러 스레드에게 나누어주는것이 동시성 프로그래밍의 이유이다. GCD는 DispatchQueue 에 들어온 작업들에 알맞은 스레드를 생성→ 실행→제거 한다. GCD가 해주니까 우리는 DispatchQueue에 넣어주면 된다는것이다. DispatchQueue 에는 serial (직렬) 큐와 concurrent(병렬) 큐가있다. Serial은 한스레드를 실행하여 전 작업이 끝나고 후작업을 시작하고 Concurrent는 여러 스레드로 작업이 분배되어 순서대로 시작은 하지만 끝나는 시점은 모두 다르다. 지금까지 이해하기로는 Serial은 동기성 Concurrent는 비동기 같은 느낌이다. 하지만 이들은 다르다고한다. Serial + Sync → 작업을 1개 스레드로 보내고 동기로 처리 메..
-
언제 class 대신 struct 를 사용할까?개발/Swift 2021. 11. 14. 16:30
[iOS] Swift Modern Collection View & MVVM 패턴 가이드 강의 | 덤벨로퍼 - 인프런덤벨로퍼 | MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자재로 다룰 수 있게 됩니다., Swift iOS UI, 제대로 다루는 핵심 기술! 📲 iOS Swift 레이www.inflearn.com swift에는 class 와 struct 가 있다. 둘의 차이는 쉽게 크게 이렇다.class 는 상속을 받을수있지만 struct 는 상속이 불가한점class 는 참조 타입이지만 struct는 값 타입인점 참조타입과 값타입에 대해 대표적인 차이점으로두개의 변수에 참조 타입을 할당할때 하나의 변수만 바꿔도 두..
-
[Swift] 클래스의 init 파헤치기개발/Swift 2021. 10. 18. 17:14
구조체에서 init struct에서 init 메소드를 구현하지않아도 그안의 프로퍼티에따라 init 함수를 사용할수있다. "memberwise initializer" 를 제공하기 떄문이다. struct Car { let brand: String let price : Int } let car = Car(brand:"KIA", price:3000) 클래스의 init 에서는 designated init / convenience init 이렇게 구분된다. 쉽게 designated는 클래스의 찐 init 이고 convenience 는 몇개의 프로퍼티를 init과 다르게 하고싶을때 designated init을 부르고 바꾸는 식이다. class Car : Vehicle { var brand: String var pr..
-
[Swift 기본]ARC 와 Weak vs Strong개발/Swift 2021. 10. 4. 19:50
ARC - Automatic Reference Counting 자동으로 메모리를 관리해주는 방식이다. 특징은 참조 카운팅이 0 이될때만 메모리에서 해제한다. 아래와 같이 프로퍼티 , 상수, 변수에 클래스 인스턴스를 할당하는걸 강한 참조라고 함 let sangsu = Person(name:"sangsu") var sangsu = Persion(name: "sangsu") let myFriend : Friend() myFriend.person = Person(name:"sangsu") 아래의 경우 참조 카운팅을 한번 보자. let test1 = Person(name:"simon") let test2 = test1 test1 = nil 위의 test1 상수는 nil값이 할당되어 참조가 사라졌지만 test2 상..
-
Localize + UserDefaults 사용하여 언어 설정 기능 구현 하기개발/Swift 2021. 9. 16. 15:51
Localizable 세팅 참고 : https://zeddios.tistory.com/368 앱 내의 언어설정을 위해 Localize 를 사용하고 해당 언어설정 상태를 앱 내부에 저장해두고 사용하기위해 UserDefaults를 사용했습니다. 첫번째로 Localize.setCurrentLanguage() 함수를 사용해 언어를 세팅해주는것입니다. @IBAction func onClickKorean(_ sender: Any) { Localize.setCurrentLanguage("ko") } @IBAction func onClickEnglish(_ sender: Any) { Localize.setCurrentLanguage("en") } "ko" "en" 같은 언어코드는 http://www.lingoes.ne..
-
재사용 가능한 tableview cell nib만들기개발/Swift 2021. 9. 2. 18:53
tableview cell 을 하나 만들어두고 여려곳에서 쓰기위해 사용하는 tableview 에서 디자인을 구현하지않고 cell 만 따로 빼내서 디자인을 구현 하려한다. 디자인은 이렇게 대충 구현해두고 Class명을 지정해준다 이렇게 파일은 만들어둔 상태이다. 또 Identifier를 지정해준다. Class명과 꼭 같을 필요는없다. 이제 여기 HelpViewController 에서 아까 만들어둔 BoardTableViewCell (xib파일)을 사용할것이다. 그러려면 우선 tableview에 nib을 등록을 해줘야한다. @IBOutlet weak var faqTableView: UITableView! private func registerXib() { let nibName = UINib(nibName:..
-
expandable + dynamic height tableview cell 구현하기개발/Swift 2021. 9. 2. 18:24
데이터 값에 따라 유동적인 높이를 가진 Tableview를 구현 해야하고 그리고 해당 Tableview는 접기/펼치기 기능이 들어 있어야 할경우의 예시입니다. 우선 Tableview의 기본적인 구현 이 되어있다는 가정하에 진행합니다. 접기 펼치기 기능은 단순히 Row의(cell) 높이를 바꿔 주면 됩니다. heightForRowAt 함수를 통해 유동적으로 cell의 높이를 지정 해주면 됩니다. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { print("heightForRowAt \(indexPath)") if helpViewModel.isSelectedCell(indexPath: index..
-
Realm swift struct 타입, List타입 수정 하는법개발/Swift 2021. 8. 3. 17:46
내부 저장소에 리스트를 저장해야할 일이생겼다. moduleList 라는 [ModuleModel] 배열을 저장하고 꺼내 쓰고 수정하는것이 목적이다. 우선 ModuleModel 은 struct타입이다. struct ModuleModel { let id: String! let title: String! } struct ModuleModel { let id: String! let title: String! } struct은 사실 realm에 넣을수 없다. Object 타입만 사용 가능하다. 대신에 비슷한 Object 클래스를 만들어준후 넣어줄수 있다. 그리고 struct가 필요한 상황에 타입을 바꿔주는 방법으로 구현한다. class RealmModuleModel : Object { @objc dynamic va..