목록Swift (45)
브래의 슬기로운 코딩 생활
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Ljkc2/btsCCysJACe/r9TNnemJYHok7JMyCnaR21/img.png)
guard문(조건식이 거짓이면 실행) guard문은 swift 2에 도입된 구문 guard문은 표현식이 거짓(false)으로 판단될 경우에 수행될 else 절을 반드시 포함해야 함 - else 절에 속한 코드는 현재의 코드 흐름을 빠져 나갈 수 있는 구문(return, break, continue, throw 구문)을 반드시 포함해야 함 - 또는 다른 함수를 else 코드 블록 안에서 호출할 수도 있음 guard else { // 표현식이 거짓일 경우에 실행될 코드 } // 표현식이 참일 경우에 실행되는 코드는 이곳에 위치 guard문은 기본적으로 특정 조건에 맞지 않을 경우에 현재의 함수나 반복문에서 빠져 나갈 수 있도록 하는 ‘조기 출구(early exit)’ 전략을 제공 guard~let의 활용 g..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b6aVe0/btsCIGvZOFi/7UcaLD9htK8OKguI7ZHKU1/img.png)
연산자의 우선순위와 결합성 기본 할당 연산자 할당 연산자(=)는 두 개의 피연산자를 가짐 왼쪽에 있는 피연산자는 값이 할당되는 변수 또는 상수이며, 오른쪽에 있는 피연산자는 할당할 값 오른쪽 피연산자는 주로 산술식 또는 논리식을 수행하는 표현식이며, 그 결과는 왼쪽 피연산자인 변수나 상수에 할당 var x: Int? // 옵셔널 Int 변수를 선언함 var y = 10 // 일반 Int 변수를 선언하고 초기화함 x = 10 // 값을 x에 할당함, Optional(10) x = x! + y // x + y의 결과를 x에 할당함, Optional(20) x = y // y의 값을 x에 할당함, Optional(10) 산술 연산자 보통 두 개의 피연산자를 받는 이항(binary) 연산자 예외로는 값이 음수임..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTUPHG/btsCzUhXbOC/nMC7Pn2Q0xCsjdGJ1HeWWk/img.png)
Int형 vs Optional Int형 10 Int Int 형 값을 저장 - var x : Int = 10 Optional(10) Int? / Int! Int형 값을 저장 or 값이 없음(nil) - var y : Int? = 10 - var z : Int! 옵셔널 타입(매우 중요) 값을 반환할 때 오류가 발생할 가능성이 있는 값은 옵셔널 타입이라는 객체로 감싸서 반환함 - Swift에서 기본 자료형(Int, Double, String 등)은 nil값을 저장할 수 없음 - nil을 저장하려면 옵셔널 타입으로 선언해야 함 옵셔널 타입은 변수 또는 상수에 아무런 값이 할당되지 않는 상황을 안전하게 처리하기 위한 방법 제공 옵셔널 타입 변수를 선언하기 위해서는 타입 선언부 뒤에 “?” 문자를 씀 - 주의 : ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/m8WvG/btsmkJbbFRW/nFUlyChZTdcVkx9hxKmu81/img.png)
옵셔널 체이닝 (Optional Chaining) 옵셔널 체이닝 (Optional Chaining) 옵셔널로 선언된 변수의 맴버에 안전하게 접근하기 위한 방법 (?) Optional Chaining 예 class Person { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } } let kim: Person = Person(name: "Kim", age: 20 ) print(kim.age) let han: Person? = Person(name: "Han", age: 25 ) print(han.age) //print(han!.age) // print(han?.age) //Optiona..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ctskiy/btskRdeWIZw/xHkXz0yNA0C6Zh3HRKlpBk/img.png)
API, Open API, RESTful을 간단하게 한 문장으로 정리 API (Application Programming Interface)는 애플리케이션들이 서로 상호작용하기 위해 사용하는 인터페이스이고, Open API는 개방적으로 접근하고 사용할 수 있는 API를 말하며, RESTful은 웹 서비스를 구축하는데 사용되는 아키텍처 스타일이다. URI와 URL URI는 리소스를 유일하게 식별하기 위한 문자열이며, URL은 그 중에서도 리소스의 위치를 지정하는 형식의 문자열이다. ViewController.swift 파일 수정 protocol 채택(adopt)과 준수(conform)개념, 필수 메서드(cellForRowAt, numberOfRowsInSection), indexPath 프로토콜 채택은 객..
- 과제 - func multiplyByTen(value: Int) { print(value*10) }multiplyByTen(value: 3) //30 강제 언래핑 func multiplyByTen(value: Int?) { print(value!*10) //강제 언래핑 }multiplyByTen(value: 3) //30 if let 옵셔널 바인딩 func multiplyByTen(value: Int?) { if let value{ print(value*10) //if let 옵셔널 바인딩 }}multiplyByTen(value: 3) //30 func multiplyByTen(value: Int?) { if let value{ print(value*10) //if let 옵셔널 바인딩 }else {..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ryOqj/btshcf84FoT/LUtzedKAoX4IP1hmQBQgr1/img.png)
func getData() { guard let url = URL(string: movieURL) else { print("Invalid URL") return } let session = URLSession(configuration: .default) let task = session.dataTask(with: url) { [weak self] (data, response, error) in guard let self = self else { return } if let error = error { print(error) return } guard let JSONdata = data else { print("No data received") return } let decoder = JSONDecoder..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/brO4o6/btsglyNErNS/mY2mH2KIcU0JsvuQmnKc3k/img.png)
delegation design pattern - class(struct)가 책임의 일부를 다른 유형의 인스턴스에 전달(또는 위임)할 수 있도록 하는 디자인 패턴 - protocol에 위임된 목록을 작성하고, delegate(보통 내가 만든 class)는 위임된 기능을 작성 프로토콜은 다중 상속이 가능함. optional: 필요한 경우 구현하는 메서드 required: 필수로 구현해야하는 메서드 ~.delegate = self ~.datasource = self delegate 소스에는 모든 메소드는 optional이다. 열거형(enum) .~ : .앞에 열거형 생략 enum Week: String { case Mon,Tue,Wed,Thur,Fri,Sat,Sun func printWeek() { //메서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bJfyng/btr9OaFP7Em/6dRgiRVm8z0G4mnKGcs8I1/img.png)
오늘은 처음으로 스위프트 문법 중 옵셔널 체이닝 이라는 것을 배웠다. 자세한 내용은 추후에 클래스 카테고리의 스위프트 카테고리에 따로 글을 작성하겠다. 일단 옵셔널 체이닝이란 옵셔널을 언래핑하는 방법 중 하나 이다. 옵셔널을 언래핑 하는 방법은 원래 3가지를 알고 있었다. 1. !를 이용한 옵셔널 강제 언래핑 - 간단하게 언래핑을 할 수 있지만 변수 안에 nil값이 들어가 있다면 크래쉬가 나므로 위험한 방법이다. 2. if~let, guard~let을 이용한 옵셔널 바인딩 - nil이 저장되어 있는 경우를 설정할 수 있기 때문에 대표적으로 사용되는 언래핑 방법이다. 3. nil 합병 연산자 ?? let optionalValue: Int? = nil let defaultValue: Int = 10 let ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zY4sP/btr77g3xdIM/tagI963CPxG7c5DwKiOmh1/img.png)
프로토콜(protocol)과 Delegate 프로토콜(protocol) - 특정 클래스와 관련없는 프로퍼티, 메서드 선언 집합 - 함수(메서드) 정의는 없음 - 기능이나 속성에 대한 설계도 - 클래스(구조체, 열거형)에서 채택(adopt)하여 메서드를 구현해야 함 스위프트 상속과 프로토콜 채택 class 자식:부모 ,(프로토콜) ... { // 코드 } - 부모 클래스는 하나만 가능하며 여러 개라면 나머지는 프로토콜 - 상속은 클래스만 가능하다. (단일상속) protocol 정의 protocol 프로토콜명{ //프로퍼티명 //메서드 선언 - 메서드는 선언만 있음 } protocol 프로토콜명 : 다른프로토콜, 다른프로토콜2{ // 프로토콜은 다중 상속도 가능 } protocol 정의, 채택, 준수 pro..