전체 글
-
URL Session Tutorial: HalfTunesiOS/iOS 2020. 5. 31. 10:04
https://www.raywenderlich.com/3244963-urlsession-tutorial-getting-started 를 공부한 내용입니다. 안녕하세요 😁 오늘은 URLSession의 DownloadTask를 활용해서 iTunes 비슷한 HalfTunes를 만들어 볼 것입니다. 초기 프로젝트를 받으면 위와 같이 SearchBar만 있는 모습을 볼 수 있는데요! 검색도 안 되는 상태랍니다. 그래서 검색 기능부터 차근차근해볼게요 :) 검색 기능 우선, 뷰 컨트롤러의 검색창에서 검색어를 입력하면 URL 통신을 통해 검색된 리스트들을 받아와야 하기 때문에 QueryService.swift에서 URLSession과 URLSessionDataTask를 만들어줘야 합니다. // URLSession을 생..
-
UIGraphics를 사용한 간단한 스케치 어플iOS/iOS 2020. 5. 16. 06:48
오늘은 코어 그래픽스를 사용해서 아이패드로 많이 사용하는 스케치 어플을 만들어 보려고 한다. iOS에서는 코어 그래픽스라는 그래픽 라이브러리를 사용하여 뷰에 그림을 그릴 수 있다. 위와 같은 간단한 뷰를 오토 레이아웃을 잡아서 스토리보드로 만들어준다. @IBOutlet var imgView: UIImageView! 이미지 뷰를 IBOutlet으로 ViewController에 선언한다. @IBAction func clearImageView(_ sender: UIButton) { imgView.image = nil } 클리어 버튼도 위와 같이 이미지 뷰에 그려져 있는 콘텐츠를 지우는 IBAction을 선언해준다. var lastPoint: CGPoint! var lineSize: CGFloat = 2.0 v..
-
SwiftUI와 UIKit 통합하기iOS/SwiftUI 2020. 5. 9. 05:52
요즘 SwiftUI에 대해서 공부를 많이 하고 있는데, SwiftUI을 UIKit에 통합하는 방법이 있어서 포스팅을 하려고 한다. 기본적으로 UIHostingController 사용으로 쉽게 통합할 수 있다. UIHostingController는 UIViewController의 하위 클래스이며, 이 클래스의 유일한 목적은 기존의 UIKit 기반의 프로젝트에 통합될 수 있도록 SwiftUI 뷰를 감싸는 것이다. UIHostingController를 사용하면 SwiftUI 뷰를 전체 화면으로 처리하거나 컨테이너 뷰에 호스팅 컨트롤러를 내장하여 기존 UIKit 화면 레이아웃 내에 개별 컴포넌트로 취급할 수 있다. 아래에 나올 프로젝트는 Storyboard 기반 Single View App으로 작성했다. Swi..
-
SwiftUI를 쓰는 이유iOS/SwiftUI 2020. 4. 25. 09:25
2019년 애플의 WorldWide Developers Conference에서 처음 소개된 SwiftUI는 모든 애플 운영체제용 앱을 개발하는 데 있어서 완전히 새로운 방법을 제공한다. SwiftUI의 기본적인 목적은 앱 개발을 더 쉽고 빠르게 함과 동시에 소프트웨어를 개발할 때 일반적으로 발생하는 버그들을 줄이는 것이다. 또한, 개발 과정에서도 앱의 라이브 프리뷰 기능을 이용하여 SwiftUI 프로젝트를 실시간으로 테스트할 수 있게 한다. SwiftUI의 선언적 구문 UIKit과 인터페이스 빌더를 사용하여 사용자 인터페이스 레이아웃을 설계하고 필요한 동작을 구현하는 것과는 완전히 다른 방법인 선언적 구문(declairative syntax)이 SwiftUI에 도입되었다. 이것은 단순하면서 직관적인 구문..
-
Closure (2)iOS/Swift 2020. 4. 17. 03:21
@escaping @escaping 속성은 인자 값으로 전달된 클로저를 저장해 두었다가, 나중에 다른 곳에서도 실행할 수 있도록 허용해주는 속성이다. func callback(fn: () -> Void) { fn() } callback { print("Closure가 실행되었습니다.") } 정의된 함수 callback(fn:)은 매개변수를 통해 전달된 클로저를 함수 내부에서 실행하는 역할을 한다. func callback(fn: () -> Void) { let f = fn // 클로저를 상수 f에 대입 f() // 대입된 클로저를 실행 } 만약 함수를 위와 같이 바꾼다면 오류가 출력된다. 전달된 클로저를 변수에 대입한 후 실행하는 것이 안된다는 것이다. 오류의 내용은 Non-escaping 파라미터인 '..
-
ClosureiOS/Swift 2020. 4. 11. 12:14
클로저 클로저란, 자신이 정의되었던 문맥(Context)으로부터 모든 상수와 변수의 값을 캡처하거나 레퍼런스를 저장하는 익명 함수이다. 전역 함수 이름이 있으며, 주변 환경에서 캡처할 어떤 값도 없는 클로저 중첩 함수 이름이 있으며 자신을 둘러싼 함수(내부 함수)로부터 캡처할 값이 있는 클로저 클로저 표현식 이름이 없으며 주변 환경으로부터 값을 캡처할 수 있는 경량 문법으로 작성된 클로저 클로저 포현식은 간단하게 줄일 수 있다. let c = { (s1: Int, s2: String) -> Void in print("s1: \(s1), s2: \(s2)") } c(1, "closure") 위의 식을 아래와 같이 줄일 수 있다. ({ (s1: Int, s2: String) -> Void inn print(..
-
델리게이트 패턴 실습iOS/iOS 2020. 3. 28. 04:42
텍스트 필드 텍스트 필드는 델리게이트 패턴을 사용하는 대표적인 객체 중의 하나이다. 기본적인 기능은 델리게이트 패턴 없이도 사용할 수 있지만, 입력값을 제어하는 등의 고급 기능을 구현하고 싶을 때에는 델리게이트 패턴을 적용해야 한다. 텍스트 필드에 델리게이트 패턴을 적용하려면 다음의 두 가지 작업이 필요하다. 텍스트 필드에 대한 델리게이트 프로토콜 구현 텍스트 필드의 델리게이트 속성을 뷰 컨트롤러에 연결 텍스트 필드 델리게이트 패턴 실습을 시작한다. 스토리보드에 텍스트 필드를 하나 만들고, 뷰 컨트롤러에 tf라는 IBOutlet으로 연결해주었다. import UIKit class ViewController: UIViewController { @IBOutlet var tf: UITextField! over..
-
프로토콜 지향언어, Swift (3)iOS/Swift 2020. 3. 21. 09:11
프로토콜의 상속 프로토콜은 클래스처럼 상속을 통해 정의된 프로퍼티나 메소드, 그리고 초기화 블록의 선언을 다른 프로토콜에 물려줄 수 있다. 하지만 프로토콜은 클래스와 다르게 다중 상속이 가능하다. 즉 여러 개의 프로토콜을 하나의 프로토콜에 한꺼번에 상속하여 각 프로토콜들의 명세를 하나의 프로토콜에 담을 수 있다. protocol A { func doA() } protocol B { func doB() } protocol C: A, B { func doC() } class ABC: C { func doA() { } func doB() { } func doC() { } }위의 코드에서 프로토콜 C는 프로토콜 A와 B를 상속받았기 때문에 C를 구현하는 클래스 ABC에서는 프로토콜 A, B, C를 모두 구현해야..