반응형


// 반갑습니다, 에르의 생각발전소입니다 :)

// 이번 시간 다뤄볼 주제는 switch구문입니다!














 

/* switch 구문

 switch 비교 대상 {

                case pattern 1 :

                            statement   

                case pattern 2 :

                            statement

                default :   

                            statement

 }


다양한 가능성이 있는 여러개의 조건 비교에 효율적으로 사용하기위해

 if~ else if 구문 보다는 swift구문이 적합하다고 있습니다.

 case pattern 마다 조건을 제시하고 default값에는 모든 변수를 대변할 구문을 실행합니다.

 기존의 C언어나 자바 많은 언어에도  switch구문이 있지만, 스위프트의 switch구문과의 차이점이 있습니다.

 스위프트의 switch구문은 일치하는 패턴이 있을 경우 해당 패턴과 일치하는 블록의 실행 코드를 처리한 전체 분기문을 종료하고

 다음 구문을 진행합니다.

 뒤에 일치하는 패턴이 있더라도, 처음 일치하는 case구문만 실행합니다.

 그리고 기존의 C 자바는 추가적으로 일치하는 case구문이 있더라고 실행됩니다.

 break구문이 따로 있어야만 멈추는게 기존 언어들의 특징이지요.

 이부분에서는 스위프트가 진화했다고도 있을 같습니다.

 

 

var con = 1

switch con {

case 1 :

    print("해당 값은 1 입니다.")

case 2 :

    print("해당 값은 2 입니다.")

case 3 :

    print("해당 값은 3 입니다.")

default :

    print("어느 조건과도 일치하지 않습니다.")

}


// break구문에 대해서 말씀드렸는데

// 스위프트에서도 타언어처럼 사용할 있는 장치가 있습니다.

// 바로 fallthrough 기능입니다.

// fallthrough 삽입하면, 해당 케이스는 무시하고 다음 케이스로 이동합니다.

// 아래 예제를 보시지요!


let test : Character = "L"

switch test {

case "l" :

    print("글자는 l입니다.")

case "L":

    fallthrough

default :

print("일치하는 글자가 없슴당")

}


// case "L" 해당되는 값임에도 fallthrough 붙어있음으로써, default값이 실행되었습니다.

// 명시적으로 구분해서, 스위치구문을 탄탄히 만들 있습니다.

//  위 예제들 실행시 나오는 값들 사진입니다 :)

반응형
by 발전소장 에르 :) 2016. 6. 1. 08:00
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

이번 시간에 다뤄볼 주제는 GUARD 구문 입니다!

저번 시간에 다뤄보았던 if 구문에 이어 guard 역시 

if구문의 친구랍니다 :)

새로운 플레이그라운드를 열어 따라해주세요











// guard 구문!


// guard 구문도 if구문처럼 주어진 식이 참인지 거짓인지 판단하는 구문인 반면, 


// 차이점은 guard구문에는 else 필수이나, 식의 결과가 참일 때는 실행되는 식이 없다는 점입니다.                  그리고 if 구문과 guard 구문은 사용자의 방식에 따라서 서로 상호호환이 가능합니다.


// guard 조건 혹은 표현식 else {


//        실행구문


// }                                            가드구문의 기본 식입니다!


// 가드구문은 주로 코드가 특정조건을 만족하는지 실행전에 미리 점검하기위한 용도로 사용합니다. 예제를 보시죠



func divide(base:Int)  {

    let result = 100/base

    print(result)

}

// 함수를 하나 만들었습니다. 디바이드라는 이름을 가진 함수는 베이스라는 인트타입의 베이스라는 이름의 매게변수를 가지며,  리슐트라는 상수는 베이스 나누기 100이다. 그리고 값을 출력하라! 만약 여기서 베이스의 값이 0 이라면? 에러가 발생합니다. 고로, 이런 에러를 방지하기위해


func guraddivide (base : Int) {

    

    guard base != 0 else {

        print("값을 다시 확인해주세요.")

        return

    }

    let result = 100 / base

    print(result)

}


// 가드를 사용하여, 일종의 안전벨트 혹은 퓨즈를 설계할 있습니다.

// 그래서 값이 0 경우 가드구문이 실행되며, 함수를 종료시키는 반면 0 이상일 경우 아래 구문을 실행시키는거죠

// 위에서 말씀드렸다시피 가드구문과 이프구문은 호환이 가능합니다!


func ifdivide (base : Int) {

    if base == 0 {

        print("연산이 불가함.")

        return

    }

    let result = 100 / base

    print(result)

}


//가드대신 이프로 만약 베이스가 0 경우 함수를 끝내도록 설계되어있습니다.

// 여기서 ~ 차이점은 가드구문은 연산의 필요 조건을 충족시킨다면,


// 이프구문은 실패할 조건을 충족시켜야합니다! 기억해주세요!


2016/04/19 - [프로그래밍발전소 ♫] - 160418 swift 란? 스위프트 언어에 대해서 알아봅시다. let과 var편


2016/04/20 - [프로그래밍발전소 ♫] - 160419 Swift part.2 String과 Numbers에 대해서


2016/04/23 - [프로그래밍발전소 ♫] - 160423 Swift Tuple, Typealias 편 ! :) 튜플과 타입얼라이어스


2016/04/25 - [프로그래밍발전소 ♫] - 160424 collection Array 편 :)


2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift Collection: Dictionary 와 Set


2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift 구문편! if, for, switch 까지!


2016/05/06 - [프로그래밍발전소 ♫] - 160506 Swift Optional 스위프트의 꽃! 옵셔널에 대해 알아보자!


2016/05/07 - [프로그래밍발전소 ♫] - 160507 Swift Optional 스위프트의 꽃 옵셔널! 마지막편!


2016/05/07 - [프로그래밍발전소 ♫] - 160507 Swift Function 이번엔 프로그래밍의 꽃! 함수편!


2016/05/12 - [프로그래밍발전소 ♫] - 160512 Swift Function 스위프트 함수편!


2016/05/12 - [프로그래밍발전소 ♫] - 160512 Swift 단순 구문 , 흐름 제어 구문 for , for ~ in구문 :)


2016/05/13 - [프로그래밍발전소 ♫] - 160513 Swift While 구문편 :)


2016/05/15 - [프로그래밍발전소 ♫] - 160515 Swift IF문! 조건문에 대해서 :)



반응형
by 발전소장 에르 :) 2016. 5. 27. 18:21
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

저번 시간에는 for구문과 while구문을 다뤄보았었는데요.

다들 ~ 만족하셨기를 바라며 !

이번 시간에는 조건문에 대해서 알아보도록 하겠습니다.!








// SWIFT 조건문 :)

// 조건값을 입력하여 특정 코드를 실행하도록 분기합니다.

// if / guard / switch 구문으로 조건문을 구별할 있습니다.


// if 구문 

// if 조건문 {

// 실행 구문

// }                위와같은 형태를 가집니다. 익숙하지요? 



var ageline = 19

var customerAge  = 16

if customerAge > ageline {

    print("미성년자의 클럽 출입은 불가합니다.")

} else { print("환영합니다! 클럽 에르입니다!")

}

// 조건에 의해 결과가 참일 경우 else 앞의 구문이!

//  결과가 거짓일 경우 else 뒤의 구문이! 

// 실행된답니다.

// 근데 조금 이상하지않나요?

// 네, 맞습니다. VALUE > VALUE 에서 앞에 값을 뒤에 값과 비교하기 때문에

// 실수로 위와 같이 잘못했다면, 나중의 결과는 참담해지겠죠?

var ageline = 19

var customerAge  = 16

if customerAge < ageline {

    print("미성년자의 클럽 출입은 불가합니다.")

} else { print("환영합니다! 클럽 에르입니다!")

}


// 이번에는 제대로 작성된 코드입니다.


// 고객나이가 제한나이보다 어리니, 미성년자의 클럽 출입은 불가합니다 라는 멘트가 프린트되고있습니다.


// 보통 조건문을 사용할 떄 조건의 갯수는 복수일 경우가 많습니다.

// 만약 3개이상의 조건이 붙는 조건문일 경우에는 어떻게해야할까요?

//  if else if 를 반복적으로 사용하여, 조건문 안의 조건문을 만들어 사용할 수 있습니다.

// 또한 if else if 통한 두가지 조건 이상의 조건문도 만들 있습니다 :)


var MySubject = "국사"

var score:String


if MySubject == "국어" {

    score = " 88점입니다."

} else {

    if MySubject == "수학"{

        score = "12점입니다."

    } else {

        if MySubject ==  "과학" {

            score = "54점입니다."

        } else {

            if MySubject == "국사" {

                score = "75점입니다."

            } else {

                if MySubject == "사회" {

                   score = "90점입니다."

                } else {

                score = "과목을 다시 확인하여주세요."

                }

            }

        }

    }

}


print("귀하의 \(MySubject) 과목 점수는  \(score) ")


//  허나 위 코드는 그닥 보기좋은 코드는 아닙니다. 


//  왜냐하면 조건문에 조건문을 계속 넣게되면, 코드가 지저분해지고 분간하기 어려워집니다.


//  하나의 중괄호 미스로 에러가 야기되는데 이런 문제를 찾으려해도 


//  코드 해석에 시간이 걸리니, 그만큼 비효율적이라고 할 수 있겟죠.


// 그래서 대게 위 방법보다는 다른 if else if 방식으로

// 더욱 깔끔한 코딩을 합니다.

// 다음 시간에는 그 방법과 진도를 나가도록 하겠습니다 :)

//  피드백을 받고 있으니, 질문해주세요 :)



반응형
by 발전소장 에르 :) 2016. 5. 15. 09:25
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

이번 시간에 다뤄볼 주제는 while구문입니다 :)

저번 시간에는 for 구문을 다뤄봤었죠?

어떤가요?  부족한 점이 있으면 피드백 기다리겠습니다 :D







// for구문과 while구문의 차이점은 or구문은 미리 정해진 실행 횟수만큼 실행되지만,

// while구문은 루프 상수나, 카운터 변수가 없고, 그냥 조건식이 false 때까지 실행됩니다.

// for구문은 횟수가 중요하며, while구문은 결과값의 true / false 여부가 중요하겠지요?

// while구문의 사용 예는 주로 1)실행 횟수를 기반으로 없는 조건 

// 2) 실행전까지는 실행횟수를 없을 3) 실행횟수가 명확치않을때


// while 조건식 {                  조건식은 반드시~ true / false 값을 반환해야합니다.

// 실행구문 

// } 


// 위와같은 타입을 가집니다 :)


var n = 2

// 변수 n 2라는 정수타입의 값을 가진다.

while n < 2000 {

    // n 2000보다 작을 때까지

    n = n*2

    // n 2 곱한다!

}

// 결과입니다 :)

// while구문은 변수가 상수를 위에 먼저 선언하시고 나서~ 


// 구문에 넣으셔야 실행이 가능합니다.


// 소소한 팁이되겠네요.

// repeat while구문


var i = 1994

repeat {

    i =  i * 2

}


while i < 1994


// repeat while구문은 조건이 무조건 false임에도 불가하고한번은 ! 무조건 한번은자동으로 실행이 됩니다.

// 고로결과값이 3988 되는거죠. while구문에 적용해보도록 하겠습니다.

var i2 = 1995

while i2 < 1994 {

    i2 = i2 * 2

}

print(i2)


// 보시면 i2 값이 그래도 1995인것을 확인하실 있습니다.

// 왜냐하면? 조건식이 false이니 한번도 실행되지않은채 남겨지는거죠.


// 감사합니다 :)


2016/04/19 - [프로그래밍발전소 ♫] - 160418 swift 란? 스위프트 언어에 대해서 알아봅시다. let과 var편

2016/04/20 - [프로그래밍발전소 ♫] - 160419 Swift part.2 String과 Numbers에 대해서

2016/04/23 - [프로그래밍발전소 ♫] - 160423 Swift Tuple, Typealias 편 ! :) 튜플과 타입얼라이어스

2016/04/25 - [프로그래밍발전소 ♫] - 160424 collection Array 편 :)

2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift Collection: Dictionary 와 Set

2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift 구문편! if, for, switch 까지!

2016/05/06 - [프로그래밍발전소 ♫] - 160506 Swift Optional 스위프트의 꽃! 옵셔널에 대해 알아보자!

2016/05/07 - [프로그래밍발전소 ♫] - 160507 Swift Optional 스위프트의 꽃 옵셔널! 마지막편!

2016/05/07 - [프로그래밍발전소 ♫] - 160507 Swift Function 이번엔 프로그래밍의 꽃! 함수편!

2016/05/12 - [프로그래밍발전소 ♫] - 160512 Swift Function 스위프트 함수편!

2016/05/12 - [프로그래밍발전소 ♫] - 160512 Swift 단순 구문 , 흐름 제어 구문 for , for ~ in구문 :)



반응형
by 발전소장 에르 :) 2016. 5. 14. 05:18
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

이번 시간에 다뤄 볼 주제는 단순 구문과 흐름 제어 구문 입니다 :)

프로그램을 만들 때 더 잘 작동할 수 있도록

일종의 윤활유라고 할 수 있겠지요?

뭐 뭐든 안중요한게 있겠습니까?

다 모든 프로그래밍 지식들이 소중하지요.

어찌됬든, 시작해보겠습니다 :0






/* 프로그래밍 과정 작성하게되는 코드를 구문이라고 하며,

 

 앱하나를 개발하기위해서 수십줄부터~ 수만줄의 코드가 필요하며, 이와 더불어 디자인 음향 네트워크 등등 따지면, 많은 노력과 시간이 필요합니다.

 

 구문의 종류는 단순 구문과 흐름 제어 구문으로 나뉘는데,


 단순 구문은 말그대로 객체의 선언 정의 일반 구문인 반면


 흐름 제어 구문은 조건문이라고 있겠지요 :)

 

 대게 흐름 제어 구문은 종류로 나눌 있는데


 -반복문, 조건문, 제어 전달문으로 나눌 있습니다.

반복문은 For구문과 While구문으로 나눌 있습니다.

 

 for 반복문은 주어진 구문을 정해진 횟수만큼 실행하며,

 

 for~in구문과 for구문으로 나눌 있습니다.

 

 for 구문은 반복할 때마다 카운터를 증가시키며 조건이 충족될 때까지 반복실행하며

 for in 구문은 순서에 따른 각각의 아이템에 대하여, 반복한다는 차이점이 있습니다.

 

        for (초기값; 비교 조건; 증가값){

        

            반복 실핼 구문

        }

 

 위와같이 이루어져있습니다.

 

 

 */


//  노란색 세모는 에러가 아닙니다.


//  뭐 일종의 스위프트 언어 자체에서 제공하는 권유? 랄까요?


// 저 노란색 세모를 누르시면~

//  ++ is deprecated: it will be removed in swift 3 

//  Fix - it Replace "++" with " += 1"


//  ++는 반대되었습니다. 스위프트3에서는 제거될 문법입니다!


// ++ 대신에 += 1 을 사용하여, 대체하세요 :)


// 라고 ~ 친~절히 알려주네요 :)

// 


for ex in 0 ..< 11 {

    print("\(ex)번째 구독입니다.")

}


// 스위프트가 시키는대로 대체한 모습입니다. 

// 근데 += 1 이 아니라 아예 다른 코드가 되버렸네요?

for ex in 0 ..< 11  여기에서 0..<11 는 0부터 10까지라는 뜻이됩니다.

//  결국은 0...10 과 똑같은 뜻이지요 :)

// for 구문이 for in 구문으로 변경되었고 스위프트에 최적화된 코드로 대체되었습니다 :)

// 증가도 가능하며, 반대로 차감도 가능합니다!

 

// for 구문을 실행하여, i라는 변수를 제공하여, 2016 값을 주고 i 는 1994보다 작고 1씩 감소한다.


// 이번에는 스위프트에서 추천하는 연산자인 -=1 연산자를 사용하였습니다. :)


// for in 구문은 배열, 딕셔너리, 범위 데이터의 개별 점수 , 문자열 순번으로 관리되는 데이터 타입을 효과적으로 순회할 있는 구문입니다.


// for 루프 상수 in 순회 대상 {

//        실핼구문

// }


for loopNumber in 1...5 {

    print("2 X \(loopNumber) = \(loopNumber*2)")

}


// for in 구문을 사용하여, loopNumber라는 루프 상수를 선언하고 순회대상으로는  1...5를 지정했습니다. 1..<6도 가능하겠지요?


// 그리고 print 문법을 사용하여 실행하였습니다.


// 나이 계산이 가능하네요 :)



// 문자열 기억하시나요?

// 문자열과 문자의 차이도 기억나시는 분들은 이해가 쉬울겁니다 

//  


var lang = "swift"

for char in lang.characters {

    print("개별 문자는 \(char) 입니다.")

}


//  for char in lang.characters 에서 character는  


//  문자열을 문자로 순회 구간을 지정한다는 얘기입니다.

//  고로 swift는 5자이니 5회 순환하겠지요?

// var characters : String.CharacterView {get}

// A collection of Characters representing the String's extended grapheme clusters.

// 문자들의 콜렉션으로 문자열의 확장된 서기소의 다발을 일컫는다 라고 얘기해주네요.


var lang = "swift"

for char in lang.characters {

    print("개별 문자는 \(char) 입니다.")

}



// 고로, 위와같은 결과값을 얻으실 수 있습니다 :))))


//  또한 루프상수는 생략할 수 있습니다 :) _ 언더바를 대신 집어너어서 가능하지요


let size = 5

let padchar = "0"

var keyword = "3"


for _ in 1...size {

    keyword = padchar + keyword

    

}

print("\(keyword)")

// size = 5 ; patcher = "0" ; var keyword = "3"

//  for _ in 1...size 는 1...5까지의 의미가 됩니다.

// keyword = patcher + keyword 이면,

// padchar의 0가 다섯번 삽입된 후 3이 붙는단 얘기입니다.

//  고로, 값은 000003 이지요 :)


2016/04/19 - [프로그래밍발전소 ♫] - 160418 swift 란? 스위프트 언어에 대해서 알아봅시다. let과 var편

2016/04/20 - [프로그래밍발전소 ♫] - 160419 Swift part.2 String과 Numbers에 대해서

2016/04/23 - [프로그래밍발전소 ♫] - 160423 Swift Tuple, Typealias 편 ! :) 튜플과 타입얼라이어스

2016/04/25 - [프로그래밍발전소 ♫] - 160424 collection Array 편 :)

2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift Collection: Dictionary 와 Set

2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift 구문편! if, for, switch 까지!

2016/05/06 - [프로그래밍발전소 ♫] - 160506 Swift Optional 스위프트의 꽃! 옵셔널에 대해 알아보자!

2016/05/07 - [프로그래밍발전소 ♫] - 160507 Swift Optional 스위프트의 꽃 옵셔널! 마지막편!

2016/05/07 - [프로그래밍발전소 ♫] - 160507 Swift Function 이번엔 프로그래밍의 꽃! 함수편!

2016/05/12 - [프로그래밍발전소 ♫] - 160512 Swift Function 스위프트 함수편!

2016/05/12 - [프로그래밍발전소 ♫] - 160512 Swift 단순 구문 , 흐름 제어 구문 for , for ~ in구문 :)

2016/05/13 - [프로그래밍발전소 ♫] - 160513 Swift While 구문편 :)


반응형
by 발전소장 에르 :) 2016. 5. 13. 02:22
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

이번 시간에는 스위프트와 같은 프로그래밍 언어의 꽃!

함수에 대해서 다뤄보도록하겠습니다!

함수는 일종의 연장(도구)입니다.

못질을 하기위해서는 망치가 필요하겠지요?

그럼 그 망치를 만들어야하는데, 

여기서 망치가 함수가 되는겁니다!

그러므로, 꼭 알아야겠죠?






OPTIONAL 편에서 사용했던 예제를 가져왔습니다 :)

import UIKit


let movie = "Death Note"


// moive라는 상수를 선언하고 값은 "Death Note"를 가집니다.


var ratings:[Double]? = nil


// 처음에는 값이 없고 나중에 추가될 것이기 떄문에. 옵셔널로 지정해줍니다.


let url :String = "www.DeathNote.com"


// 주소는 당연히 있어야겠지요?


// 그리고 타입을 선언해줬습니다! 


ratings = [1.5, 2.5, 3.0 ,5.0, 4.5, 1.0, 3.5, 2.0]


// ratings 8개의 더블값들들을 주었습니다!


var info:String = "\(movie)"


var info:String = movie


// 둘 중 어느 타입으로 주든 상관없습니다 :)

// print 역할을 맡게될 info 변수입니다!


// 이제 함수를 만들어봅시다!


//    func <#name#>(<#parameters#>) -> <#return type#> {

//         <#function body#>

//     }


// 스위프트에서의 함수 틀입니다. parameters에는 매개변수가 들어가고 


// return type에는 함수에 돌려지고 결과값을 표출할 때의 


// 값을 지정해주셔야합니다.


// function body 함수의 내용입니다.


func funcRatings(paraRatings:[Double]) -> (average:Double, min:Double, max:Double){


    //  paraRatings:[Double]이라고 선언했는데, 왜냐하면 ratings


    //  더블값이기 때문입니다. 게다가 어레이상태이죠.


    //  리턴타입은 튜플이며 평균과 최소, 최대값을 구할 것이며, 타입은 더블입니다.

    

    // 왜냐하면 ratings 값들이 더블값이기 때문이지요!


    var sum = 0.0, min = paraRatings[0], max = paraRatings[0]

    

    // sum 0.0 값을 가지며, min,max paraRatings에서의 첫번째값을 가진다. 라고 변수를 생성해주세요.


 

    for value in paraRatings {

        

        // for~in구문을 활용해봅시다!

        

        if min > value {min = value}

        

        // 만약 min 값보다 크다면  value 최소값입니다.

        

        if max < value {max = value}

        

        // 만약 max 값보다 작다면  value 최대값입니다.

        

        sum += value

        

        // sum에는 값들을 차곡차곡더합니다. 총합이니까요!

 

}


 

let average = sum/Double(paraRatings.count)

    

    // 평균값은 총합에서 paraRatings 갯수만큼 나눈 값입니다!

    

    // 여기서 paraRatings.count Double타입이 지정된 이유는?

    

    // 그렇죠, 값들이 더블값이고 따로명시해주지않으면 

    

    // 스위프트 정수로 인지하니 타입을 정확힌 지정해야하는거죠

    

    // 스위프트는 타입과 대소문자에 까칠합니다!

    

    return(average,min,max)

    

    // 반환으로는 average, min, max 반환한다.

    

}

언렙하지않으면 스위프트가 유혹을 합니다.

너 이값이 언렙되지않았는데, ! 나 ? 써서 언렙할레?

그게 더 깔끔할 것 같은데?

ㅋㅋㅋ그래서 !를 붙힘니다!

 

info += " has \(ratings!.count) ratings.\r\n average is \(record.average) from \(record.min) to \(record.max),  \r\n Also our offical website is here \(url) "



print(info)


// 이렇게 갑이 또아앟! 뜹니다 :)

// 그럼 끝이에요.

// 함수를 이용해서 연산을 했고 그 값을 활용해서 위와같은 결론을 얻었습니다 :))))


// 조만간 함수와 옵셔녈 컬렉션들에 대해서 심화편을 업로드하도록 하겠습니다 :)


반응형
by 발전소장 에르 :) 2016. 5. 12. 08:01
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

옵셔널은 잘 끝내셨나요?

이번 시간에는 함수에 대해서 겉만 살짝 다루보도록 하겠습니다.

저번에 이용한 코드를 그대로 가져와서, 

응용해보도록하겠습니다 :)






let Movie : String = "Death Note"


var ratings : [Double]? = nil


var officialUrl = "www.deathnote.com"


ratings = [4.5, 3.5, 2.5, 1.5, 4.5, 0.5]


// ratings 값을 초기화시켜보도록하겠습니다!

func funcratings (history:[Double]) -> (average:Double , min:Double, max: Double) {

    

    // history:[Double] 더블타입으로 평균, 최소값, 최대값을 지정해준다.


var sum = 0.0, min = history[0], max = history[0]


// sum 모든 값을 더할 것이고~


    // min max 히스토리의 첫번째 값을 가진다!


    for value in history {


    // for~ in문을 돌려봅시다!


        if min > value { min = value }


    // 만약 최소값이 값보다 크다면, 값이 최소값을 가진다.

    

        if max < value { max = value }


    // 최대값이 값보다 작으면 값이 최대값이 된다.

    

        sum += value


    // sum에는 모든 값들을 더한다.

    

    }


let average = sum/Double(history.count)


// 평균은 sum history 카운트 갯수로 나누어서 평균값을 구한다.

        

    return (average, min, max)

// 그리고 return값으로 평균 최소 최대값을 반환한다!

    

}



var movieInfo: String = "\(Movie)"


if let conratings = ratings {

    

    let history = funcratings(conratings)

    

    // 이제 history funcratings이며! funcratings conratings이다!

    

    movieInfo += "has \(conratings.count) ratings. \r\n average is \(history.average) from \(history.min) to \(history.max) ."

 

    // \r\n 한줄띄우기! 백슬레쉬에요 저번에 정슬레쉬로 설명드렸는데,

    // 사실은 백슬래쉬였답니다..어찌됬건

       

}

movieInfo += "\r\n let's contact our page : \(officialUrl)"




print("\(movieInfo)")



Death Notehas 6 ratings. 

 average is 2.83333333333333 from 0.5 to 4.5 .

 let's contact our page : www.deathnote.com 


//라는 최종적인 결과를 표출하였습니다.


// 함수는 일종의 도구이며,


// 본인 스스로에게 적합한 도구를 만들어, 적절한 시기에 사용하시면 됩니다!


// 함수를 얼마나 잘 만드냐, 적절하게 잘 설계를 하냐는 다~ 개발자의 재량이며, 가치입니다.


// 고로, 열심히 공부하여, 우리의 가치를 증진시켜봅시다 :)))


반응형
by 발전소장 에르 :) 2016. 5. 8. 00:00
반응형

안녕하세요~ 에르의 생각발전소입니다 :)

이번 시간에는 옵셔널의 마지막편입니다!

Force Unwrapping

Optional Binding

Implicitly Unwrapped Optional 

위 세가지 중  옵셔널과 임플릭시티 언렙 옵셔널에 대해서 알아보겠습니다:)

지난번 다뤄보았던 코드들 그대로 가지고 계신가요?!

시작해보죠.





if let conratings = ratings {

    

    //  if let conratings = ratings 새로운 상수 선언 대입!

    

    movieInfo += "has \(conratings.count) ratings."

    

    //ratings.count 또한 conratings.count 변경!

}


if let conofficial = officialUrl { // 홈페이지주소가 값이 아니라면,


  movieInfo += "/r/n let's contact our page : \(conofficial)"

    

    // 무비인포에 위의 문장을 더한다. /r/n 한줄 띄움임.

    

}


print("\(movieInfo)")


// 포스언렙핑 말고 다른 방법도 있음!

// Optional binding : if var , if let 으로 옵셔널사용을 최소화하기 위해 변수나 상수를 새로 만드는 것임.


var officialUrl : String! = nil


// 처음에는 nil이지만 나중에 어떻게든 무조건 값을 받을 경우는 implicity unwrapped optional방식을 사용하여

     

     타입뒤에 ! 붙임! 그렇게 되면?!

officialUrl = "www.deathnote.com"


// if let conofficial = officialUrl { // 홈페이지주소가 값이 아니라면,


//  movieInfo += "/r/n let's contact our page : \(conofficial)"

    

    // 무비인포에 위의 문장을 더한다. /r/n 한줄 띄움임.

    

// }


movieInfo += "/r/n let's contact our page : \(officialUrl)"


// 위에 if let conofficial 필요없이 바로 옵셔널이 아닌것 마냥 쉽게 사용이     가능함!


print("\(movieInfo)")


// 포스언렙핑 말고 다른 방법도 있음!

// Optional binding : if var , if let 으로 옵셔널사용을 최소화하기 위해 변수나 상수를 새로 만드는 것임.


// 마지막으로 Implicitly Unwarrped Optional 있음!

// 옵셔널 선언 나중에는 반드시 값을 가지게 값에게 방법을 사용할 있음!

// 보다 효과적임.


// 옵셔널은 스위프트에서 매우 중요한 부분이니, 다시 한번 제대로 되새겨주세요!


반응형
by 발전소장 에르 :) 2016. 5. 7. 21:50
반응형

안녕하세요~ 에르의 생각발전소입니다! :)

이번 시간에는 스위프트의 꽃!

옵셔널을 빼고 스위프트를 안다고 절대 할 수 없죠!?

드디어 이번 시간에는 Optional 에 대해서 알아보겠습니다!


시작해볼게요 :)










// 스위프트의 꽃인, optional


// Nil 값이 없는 무의 상태를 의미함.


// 특히 0 NIL 개념은 다름. 0 정수가 있다는 얘기임.


// Optuonal : 프로그래밍의 안전벨트, 실행 Nil 돠어 프로그램 크래쉬를 일으킬 있는 변수를 특별히 관리한다는 것임


// 스위프트의 장점이자, 단점인데 결론적으론 좋은 장점임!


// 옵셔널을 만드는 방법은 TYPE뒤에 ? 붙이면 .


// EX: NAME:TYPE? = VALUE


let Movie : String = "Death Note"


// 데스노트라는 값은 가진 스트링타입의 무비네임을 가짐 변수임.



var ratings : [Double]? = nil


// 평점을 더블타입으로 nil값을 주어서 선언함.

var ratings : [Double]? = nil


// 평점을 더블타입으로 nil값을 주어서 선언함.


// 허나 포스 언렙핑을 사용했음에도 불구하고 코드가 확실히 죽어버림.

왜냐하면, 값이 결국은 없기 때문임.

고로 이 방법을 사용하면, 빠른 길을 머어어어어얼리 돌아가야하는 결과가 나옴. :(


officialUrl = "www.deathnote.com"


// 일단 홈페이지 주소를 부여함.


var movieInfo: String = "\(Movie)"


// 무비지인포라는 스트링타입의 변수를 선언하고 무비인포는 무비라고 초기화함.


// ratings != nil 에서 ratings는 nil이 아니다! 라는 연산자입니다! (!= NOT)

// 그래서 ratings는 nil값이 아니라고 선언을 했으니!! 문제가 없음!


// /r/n는 한줄 띄움임! 앞으로 자주 사용하실거에요 :)

// officialUrl != nil 이 nil값이 아니라면,

movieInfo에 위 문장을 더한다~!


// 앞에 Optional이 보기 싫고 불완전하게 코딩이 되었으니!


// 짜잔!. officialUrl에 ! 를 붙여서 포스 언렙핑을 시켜서

// 완변히 만들어줍니다 :)

다음 시간에는 ~ ? Optional binding 과 Implicity Wrapped Optional 에 대해서 

다루어보도록하겠습니다!

2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift 구문편! if, for, switch 까지!


2016/05/05 - [프로그래밍발전소 ♫] - 160505 Swift Collection: Dictionary 와 Set


2016/04/25 - [프로그래밍발전소 ♫] - 160424 collection Array 편 :)


2016/04/23 - [프로그래밍발전소 ♫] - 160423 Swift Tuple, Typealias 편 ! :) 튜플과 타입얼라이어스


2016/04/20 - [프로그래밍발전소 ♫] - 160419 Swift part.2 String과 Numbers에 대해서


2016/04/19 - [프로그래밍발전소 ♫] - 160418 swift 란? 스위프트 언어에 대해서 알아봅시다. let과 var편



반응형
by 발전소장 에르 :) 2016. 5. 7. 03:23
반응형

안녕하세요~ 에르의 생각발전소입니다!

저번 시간에 다뤄보았던 Dictionary, Set, Array에 이어,

이번에는 코드의 생명. 

연산자 파트에 속하는 구문에 대해서 살~~짝 알아보도록 하겠습니다! :)\











// if = 조건의 따른 분기문임.


//    if condtion {  ...

//    } else {

//       ...

//     }    //

//  위와 같은 구조를 가짐.


// if 조건이 참이면 else 앞의 구문이 실행되고,

// 거짓일 경우 else 뒤의 구문이 실행된다.


// 전편에 사용했던 변수를 이용하여, if문을 만들어보겠습니다.



if intersect.count > 0 {

    print("두개의 팀에 모두 소속돤 학생은 \(schoolTripTeam1) 입니다.")

} else {

    print("두개의 팀에 모두 소속된 학생은 없습니다.")

}


// intersect 학생수가 0보다 많으니 참이므로, else 앞의 구문이 실행됨.


// 위와 같은 조건식으로 if문을 작성하여 구동하실 있습니다.


// for 구문 : 범위 또는 컬렉션의 반복 구문.


/* for ; 반복조건 ; 증가값 {...

    

 } for item in collection { ...

 

 }   

  */


for studentName in schoolTripTeam1 {


    print("\(schoolTripTeam1) 1 소속된 학생이 맞습니다.")


}


// for switch 구문, 다양한 변수의 경우를 집어 넣을 사용.


for (name, scale) in SeminaRooms  {

    // SeminaRomms 스트링값을 name 인트값을 scale 할당받음.

    

    let roomInformation:String

    //새로운 스트링 타입 상수를 만들어 케이스를 가정하나, print 사용해도됨.

    switch scale { // scale 스위치로 사용하겠다~


    case 4:

        // 스케일이 4라면!?

        roomInformation = "\(name) 작은 방이며. \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 5...10:

        //스케일이 5~10까지라면?

        roomInformation = "\(name) 중간 규모의 방이며, \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 11...20:

        // 스케일이 11~20까지라면?

        roomInformation = "\(name) 규모의 방이며, \(scale)명을수용할 있는 규모의 방입니다."

    

    case 21...30:

        //스케일이 21~30까지라면?

        

        roomInformation = "\(name) 별도의 예약이 필요한 방이며, \(scale)명을 수용할 수있는 규모입니다."


    default:

        // 디폴트를 통해서 네가지 이외의 변수가 발생할

        // 해당값을 실행한다! 라고 모든 변수를 충족시켜줘야만 !

        roomInformation = "\(name) 이하의 방은 없습니다."

        

    }

}


for (name, scale) in SeminaRooms  {

    

    let roomInformation:String

   

    switch scale { 

    case 4:

        

        roomInformation = "\(name) 작은 방이며. \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 5...10:

       

        roomInformation = "\(name) 중간 규모의 방이며, \(scale)명을 수용할 있는 규모의 방입니다."

    

    case 11...20:

       

        roomInformation = "\(name) 규모의 방이며, \(scale)명을수용할 있는 규모의 방입니다."

    

    case 21...30:

  

        

        roomInformation = "\(name) 별도의 예약이 필요한 방이며, \(scale)명을 수용할 수있는 규모입니다."

    default:

       

        roomInformation = "\(name) 이하의 방은 없습니다."

        

    }

}


// 주석을 삭제한 코드 전문입니다.!


// 도움 되셨길 바랍니다!



반응형
by 발전소장 에르 :) 2016. 5. 6. 02:10
| 1 2 3 4 5 6 |