본문 바로가기

Swift

(5)
SwiftUI, WKWebView 구현하기 import SwiftUI import WebKit struct ContentView: View { let url = "https://google.com" // showAlert가 true면 알림창이 뜬다 // If showAlert is true, a notification window pops up @State var showAlert: Bool = false // alert에 표시할 내용 // This is the content to be displayed in the alert. @State var alertMessage: String = "error" // 웹뷰 확인/취소 작업을 처리하기 위한 핸드러를 받아오는 변수 // Variable that gets the handler to handle ..
Map, Filter, Reduce - 컬렉션타입을 더 쉽고 편리하게! [이미지 출처 : https://www.joshmorony.com/filtering-mapping-and-reducing-arrays-in-ionic-2/] Swift에는 컬렉션타입을 사용할 때 매우 편리하게 쓸 수 있는 몇 가지의 함수를 제공한다.루비 개발자라면 익숙한 Map, Filter, Reduce가 그것이다. 이 3가지 함수는 데이터를 주로 처리하는 작업의 양을 획기적으로 줄여주기 때문에 필수적으로 익혀두는 것이 좋다. Map 맵은 컬렉션타입을 순환하여 특정 값을 결과값으로 리턴해 준다. 예제를 보자. let number: Array = [1, 2, 3, 4, 5] number 배열은 총 5개의 값을 가지고 있다. 만일 해당 값에 일괄적으로 * 2를 하고 싶다면 print( number.map(..
확장(extension)을 이용해서 테이블 뷰 리팩토링하기 왜 이런 방법을 생각했나 아래의 화면 보자 대부분의 앱은 이런 식으로 ViewController 안에 TableView를 포함하고 있다. iOS에서 TableView는 'TableView Protocol'에 따라서 몇 개의 필수 함수를 구현해서 사용한다. (numberOfRowsInSection, cellForRowAt 같은) 우리는 Obj-C 때부터, 이렇게 ViewController 안에 테이블 뷰가 존재하는 경우 TableView 구현 내용이 상당 부분을 차지하면서 ViewController의 코드 흐름을 방해하는 느낌을 강하게 받아 왔다. 만일 다중 Table의 경우에는 이 문제는 더 심각해진다. 우리는 TableView를 사용할때 TableView의 내용만 따로 분리 할 수 있는 좋은 방법이 없..
프로토콜 지향 MVVM 디자인 패턴 적용하기 보통 iOS 프로젝트를 개발하다 보면 반드시 만나게 되는 문제가 있다. 바로 의도하지 않게 특정 클래스가 비대해 지면서 코드 관리가 점점 어렵게 되는 문제이다. 또한 iOS는 MVC 모델 패턴을 적용하기가 어중간하다. 하지만 디자인 패턴을 무시하고 코딩을 하다 보면 결국 유지보수 비용이 한도 끝도 없이 늘어나기 마련이다. 그러다보면 결국 스크롤을 한참 해야하는 소스들이 생겨난다. 디자인 패턴이 정확하게 적용되지 않은 소스의 문제점은 파악하기 쉽지 않은 코드재활용이 어려운(거의 불가능한) 소스본인조차 나중에 코드를 보면 바로 알아보기가 어렵다는 문제 등을 가지고 있다. 이런 문제를 해결하고, 재사용과 향상 가능한 코드를 만들기 위해 고민하던 중 스위프트 커뮤니티에 자주 등장하는 MVVM 모델 패턴이 눈에 ..
Swift에서 애매한 옵셔널의 처리 옵셔널은 틀림없이 Swift의 가장 중요한 기능 중 하나이며 Objective-C와 같은 언어와 구분되는 핵심 요소이다. nil이 올수 있는 경우를 사전에 처리하므로, 우리는 보다 정확하게 오류를 예방할 수 있는 코드를 작성할 수 있다. 우리는 옵셔널을 배우면서 가능하면(?) 옵셔널 타입을 강제로 해제 하지 말라고 배웠지만,실재로 많은 예제를 볼때에도 옵셔널 타입을 강제하는 경우를 종종 볼 수 있다. 이거 절대로 하지말라며 ???????????????????????????? 위 예제는 테이블 뷰를 선언하는 예제인데 테이블 뷰가 옵셔널 타입으로 선언된 것을 볼 수 있다. 문제는 해당 테이블 뷰를 사용할때 guard나 if문을 써서 안전하게 옵셔널을 해제하지 않는다는 것이다. 하지만 viewDidLoad 함..