반응형

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

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

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

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

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

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

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

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






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 , var , int , double " 에 

이어서 String, Numbers에 대해서 다뤄보겠습니다.

String은 문자열을 의미입니다. 

여기서 문자열이란, 문자들이 모인 열을 의미하며, 

문자들은 character로 구분하며 이 character들이 모이면 String이 되는 개념입니다.

아래 예문을 살펴볼까요?

logan이라는 문자열을 상수로 정의하였고, hi라는 문자열을 상수로 정의하였습니다.

헌데 왜 에러가 뜰까요?

이유는 바로 "(큰 따옴표) 때문입니다. 

스트링으로 정의할 때는 문자열 앞뒤로 큰 따옴표가 꼭 필요합니다.

스트링 앞뒤로 큰 따옴표를 붙히니 에러가 말끔히 사라졌습니다.


mr이라는 클레스에 lee라는 스트링을 수정 추가할려는데 

에러가 발생합니다 왜그럴까요?

맞습니다.

mr는 상수 클레스이므로 건들 수 없습니다.

고로, mr 대신 hi 변수클레스에 hello 스트링을 더했습니다. 

글자가 붙는 것을 원하지않는 분들은 앞에 공백을 넣어주세요.


그럼 mr, hi 두 클레스를 붙혀서 " hi hello logan " 이라는 값을 얻고자합니다.

+= 덧셈 연사자를 이용하여, " hello " + mr 를 입력하여주시면 우측에

"hi hello logan" 이라는 결과값이 표출되는 것을 보실 수 있습니다.

let의 값을 다른 값에 덧셈하는 것은 가능합니다. (허나 직접적으로 초기화시키는 것은 불가능합니다.)



charaters라는 상수클레스를 만들고 mr클레스의 문자열의 각 문자들에 접근하기위해 

characters 기능을 이용하여, 간단하게 오브젝트 뷰가 생성되었습니다.

l, o, g, a, n 이라는 5개의 문자가 보이는데요.

count 기능을 사용하여, 실셈이 가능합니다.

let count = characters.count 로 5개라는 결과값이 표출되고있습니다.

String에 대해서 감이 오시나요?

의외로 쉽쥬?



이번에는 더블과 인트 값에 대해서 보충설명을 해보겠습니다.

height는 더블값이며, halfHeight = height/2 라는 코드에 에러없이 정삭적으로 작동합니다.


허나, divider 라는 상수클레스를 만들어 height/2 대신 height/divider 를 대입하니 에러가 발생합니다.

왜그럴까요? 분명히 똑같은 숫자 2인데 말이죠.

이유는 바로 타입 때문입니다.

divider의 타입은 Int값이며 height의 값은 double값입니다.

고로, 연산이 불가능한거죠

그리고 float은 32bit이며, double은 64bit입니다.

그냥 소수점값을 입력하면 그 클레스의 타입은 자동으로 double이 됩니다.

그래서 정확한 계산을 위해서 divider값을 Double값으로 변경 후 계산해보면 정확한 값이 표출됩니다.

저번 시간에 배운 type(value) 기억하시죠?

응용하시면 됩니다!


 Bonus) UInt 와 Int가 있습니다!.

값을 보시면 Int는 - 값까지 있는 반면에 UInt값에는 -가 없습니다!?

Unsigned Int라고 하여 양수만 표현하는 정수입니다. 

장점은 int에 비해 양수를 2배 (Int x 2 - 1 )만큼 더 사용가능합니다.

용도에 따라 Int와 UInt를 사용하시면 편하시겠죠?

1편링크<<<<


다음엔 TUPLE과 array로 찾아뵙겠습니다! :)


Have a lovely day`!


( 윤성관님의 강의와 꼼꼼한 재은씨의 스위프트2 를 참고하였습니다.)


반응형
by 발전소장 에르 :) 2016. 4. 20. 08:21
반응형

반갑습니다 :) 에르의 생각공작소의 에르입니다.

이번 시간에 다뤄 볼 주제는 바로 " SWIFT "입니다.

 objective-c 언어의 특징도 가지고 있으면서,

스위프트만의 독자적인 장점도 가지고 있는

오브젝티브씨를 다루셨었던 개발자분들은 

왠  새 한마리가 툭 튀어나와서 이리 마을을 흔드냐..

라고 하시겠는데

처음에는 스위프트가 공개됬을 때는 많은 분들이

많은 분들이.. 스위프트하면 가장 먼저 떠올리실 것 같은...?

네.. 저도 인정합니다.  스위프트하면 " 테일러 스위프트 " 가 가장 먼저 떠오르죠.

뜬금없지만, 레전드 짤하나 퍼왔습니다.

자! 이제 각설하고 본론으로 돌아가보겟습니다. 


스위프트(Swift)는 애플 iOS OS X를 위한 프로그래밍 언어 

2014년 6월 2일 애플 세계 개발자 회의(WWDC)에서 처음 소개되었다. 

기존의 애플 운영체제용 언어인 오브젝티브-C와 함께 공존할 목적으로 만들어졌으며, 

오브젝티브-C와 마찬가지로 LLVM으로 빌드되고 같은 런타임을 공유한다.

 클로저, 다중 리턴 타입, 네임스페이스, 제네릭스, 타입 유추 등 오브젝티브-C에는 없었던 

현대 프로그래밍 언어가 갖고 있는 기능을 많이 포함시켰으며,

코드 내부에서 C나 오브젝티브-C 코드를 섞어서 프로그래밍하거나 스크립트 언어처럼 실시간으로 상호작용하며

 프로그래밍 할 수도 있다. 언어 설명서도 함께 배포되었다. 애플에서는 iBooks에서 Swift에 관한 책을 배포하고 있다.

링크 --> [ swift 언어 개발문서 한국어 번역판 ] 입니다. 

본격적으로 시작하기전에, 앱스토어에서 XCODE를 다운받아주세요.

XCODE가 없다면 Swift는 무용지물입니다.


XCODE를 실행시키시면 위와 같은 화면을 보실 겁니다.

여기서 ' Get started with a playground " 를 클릭해주세요.

playground란 xcode의 장점 중 하나로써 연습장입니다.

코드를 작성해보고 작성하는 즉시 중간중간에 자동으로 혹은 수동으로 실행하여,

결과를 즉시 확인할 수 있습니다.



이름은 아무렇게 편하신데로 적어주시고 플렛폼은 IOS를 선택해주시고 생성해주세요.


플레이그라운드 실행시켰을 때 제일 처음 보게될 화면입니다.

익숙한 hello world 란 문장이 보이네요.

그런데 맨앞 줄에 var 는 도대체 무엇일까요?



let 은 상수 값을 선언하기 위해 쓰입니다. invariable 값을 선언하기위해 사용되죠.

한번 그 값으로 초기화되면 변경 할수없습니다.

var 는 변수 값을 선언하기 위해 쓰입니다. variable 갑슬 선언하기위해 사용됩니다.

한번 선언된 값을 수정할 수 있습니다.

또한, 정석대로라면 let name:type = value가 되어야하는데 타입 선언 부분이 생략되어있습니다.

왜냐하면 스위프트의 자동 타입 추론 기능으로 인해 값을 입력하면 그 값을 자동으로 인식하여,

컴파일러가 해석한 타입으로 선언합니다.

고로, 정수값을 입력하면 그 개체의 타입은 자동추론을 통해 정수로 선언되는 것이며,

문자열을 입력했을 경우 개체의 타입은 자동 추론으로 인해 스트링으로 선언됩니다.


 let으로 maxnumber라는 개체를 생성하였고 저 개체의 값은 300이며, 코드를 수정하지않는 한 변경하지못합니다.

var 로 currentNumber라는 개채를 생성하였고 저 개체의 값은 123이며, 수정가능합니다.

currentNumber 값을 123에서 230으로 수정하였고 문제없이 변경되었습니다.

허나, maxNumber 값을 300에서 350으로 수정하고자 하였으나 에러가 발생했습니다.

이번에는 currentNumber와 pastNumber를 더해보도록 하겠습니다.

currentNumber + pastNumber 라는 코드를 실행했더니 에러가 납니다.

이유는 바로 타입이 서로 다르기 때문입니다.

pastNumber는 더블 값을 가지고 있으나 currentNumber는 정수값을 가지고 있습니다.

스위프트에서는 다른 타입의 값을 서로 연산시킬 수 없습니다.

둘 중 하나의 값을 같은 타입으로 재선언해주셔야합니다.

int 타입인 currentNumber 를 Double값으로 재선언하여 pastNumber 값과 덧셈을 시켜보니...

에러가 사라졌습니다.

값을 재선언하기위해서는 type(value) 문을 사용해주시면 됩니다.!

다음편은 string과 numbers 를 다뤄보도록하겠습니다.

윤성관님의 강의를 참고하엿습니다.




p.s 처음 스위프트가 공개되었을 때는 외면은 많이 받았었습니다.

옵젝씨가 드디어 빛을 발하려고하는 과정에서 스위프트가 공개되었기 때문입니다.

스위프트의 몰락을 점치는 사람들이 꽤 있었습니다.

허나 옵젝씨와 호환되며, 더 세련되고 현대화된 스위프트가 오픈 소스로 공개되며,

실 개발에 사용되고 시간이 지남으로서 영향력이 커져가고 있음은 사실이며,

애플 또한 공식홈페이지를 통해 스위프트 언어 사용을 장려하고 있습니다.

저같이 처음으로 프로그래밍을 공부하시는 분들은 스위프트가 의외로 적합하다고 봅니다.

다들 같이 힘내봅시다! :)






반응형
by 발전소장 에르 :) 2016. 4. 19. 08:27
| 1 |