반응형

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

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

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

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

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

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

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

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






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
반응형

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

저번 시간에 다뤄보았던 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
반응형

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

저번 시간에는 tuple과 typealias를 알아보았는데요.

이번 시간에는 collection을 다뤄보도록 하겠습니다.

array는 dictionary, set 등의 친구인데요.

 콜렉션 범주안에 속하는 녀석입니다.

자 그럼 본격적으로 시작해볼까요?









var children:Array<String> = ["a", "b", "c", "d", "f" ,"g"]


// children이라는 이름의 스트링 타입을 가진 어레이를 정의하고


// 인스턴스는 a,b,c,d,f,g 입니다. 아이들의 이름이죠?


// 위에 설명했듯이 대괄호가 값을 감싸야하며, 스트링일 경우 따옴표가 따라옵니다.


var age:[Int] = [10,15,20,30,40]


// age라는 이름을 가진 인트타입의 어레이를 만들었으며,


// 10,15,20,30,40 이라는 값을 가지고 있습니다.


// 위와 같이도 어레이를 만들 있습니다.


// age 방식이 쉽지요?


// 그리고 array 되있다고해도 let으로 정의된 값은 수정 불가능합니다.


children += ["z"]


// children 어레이에 값을 추가했습니다.


// 역시 대괄호가 필요하고, children var이니 수정 가능합니다 .



let maxMemory:Int = 128


// maxMemory라는 인트타입의 상수 클레스를 만들었으며, 값은 128입니다.


// 어레이가 아닙니다.


var presentMemory:Int = 54


// presentMemory 인트타입이며 갑은 54입니다.


presentMemory += 10


// 어레이가 아니기 때문에 그냥 편하시게 더하시면 됩니다.


let UpgradeMemory1 = 250.5


// UpgradeMemory1 라는 더블값을 가진 클레스를 만들고,



var MemoryBackUp:[Int] = []


// MemoryBackUp 이라는 인트형의 어레이를 만들었고 값은 없습니다.


MemoryBackUp.append(UpgradeMemory1)


// 에러가 났습니다. 에러가 난걸까요..?


MemoryBackUp.append(Int(UpgradeMemory1))


// 왜냐하면 UpgradeMemory 타입이 더블이기 때문입니다.(형태를 정해주지않으면 자동으로 더블.)


// Int Double 친구가 됩니다.


// 그래서 하나의 형태로 통일을 시켜줘야 진행이 가능합니다.


// 스위프트는 타입에 엄격합니다.


// 엄격한만큼 안전성은 올라가며, 개발자와 사용자에게도 여러모로 이득입니다.




// 어레이를 다른 어레이에 할당했을 기존 어레이 안에 값이 있으면 복사가 .


let copy = MemoryBackUp


// copy라는 어레이를 만들고 어레이에 MemoryBackUp이라는 어레이를 할당함.



MemoryBackUp += [128]


// 그리고 MemoryBackUp 새로운 값을 추가하면?


copy


// copy MemoryBackUp 새로운 값이 추가되기 전의 값이 남아있슴.


// 아무때나 복사가 되는 것은 아니고, 


// 어레이의 값이 재초기화되는 순간 복사가 .


// 일종의 잔상같은 개념임! :)


var test1:[Int] = [10]


// 테스트1 인트형의 어레이로 10 값을 가짐.


var test2:[Int] = [20]


// 테스트2 인트형의 어레이로 20 값을 가짐.


var copytest1 = test1


// 카피테스트1 테스트1이며, 어레이는 카피테스트1 할당됨.


copytest1 += [23]


// 아까와는 역으로 카피테스트1 값을 추가했음.


test1


copytest1


// 아까의 예시와 반대의 경우도 가능함! :)





---------------------------------------------------------------------------------------------------------------------------------------







여기까지 Array에 대해서 알아보았습니다.


다음 시간에는 Dictionary 와 Set에 대해서 알아보겠습니다.!


P.S 작성하다가 점검할 때 본건데,,, 존대에서 음슴체로 바뀌네요...ㅎㅎ


Have a lovely DAY~ :))))


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. 4. 25. 08:22
  • 감사합니다 2016.04.29 16:43 ADDR EDIT/DEL REPLY

    정리해서 글써주셔서 정말 감사합니다. 각종 인터넷 책자는 초보자에게 어려운 말들로만 쓰고 그말들에 대한 풀이는 명확히 안나와있어서 어려워 하고있엇는데, 이렇게 쉽게 풀어서 써주시니 저같은 왕초보도 한번에 알수있더라고요 ! 감사합니다 !!
    다음 연재는 또 언제될까요 ~~~?

반응형

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

이번 시간에는 Tuple 과 Typealias를 다뤄볼 건데요.

스위프트의 장점이고 장점인 만큼 많이 활용되는 파트이니,

주의깊게 살펴봐주세요!

자! 그럼 시작해보겠습니다.






상수로된 튜플인 time1을 생성하였고 2, 43, 1 이란 값들을 괄호 묶었습니다.   (사진의 오타는 애교로..)

2란 값을 불러오고자하면 0을 42이라는 값을 불러오고자하면 1을 쓰시면 됩니다.

대게 첫번째 숫자니 1부터 시작할거라 생각을 하시고 실수를 많이들 하시는데,

시작은 0 부터 입니다! 참고해주세요!

튜플의 값에는 플롯, 스트링, 섞여들어가도 무방한데요. 

예로 하나 만들어보았습니다.

language라는 스트링 타입의 값과. 11이라는 정수값은 가진 값이 ex라는 튜플안에 속해있는 모습니다.

똑같이 0,1,2 순번으로 시작됩니다.

물론 0, 1, 2 대신 문자로 변경이 가능한데요.

위 화면은 0,1,2 대신 hour, min, sec 로 변환시킨 모습입니다.

상황에 맞게 바꾼다면, 더 유용하겠죠?

튜플을 튜플로 또 묶는 건데요.

각 3개의 값을 가지고 있는 두 개의 튜플을 하나의 다른 튜플로 묶은 코드입니다.

일종의 사슬을 만들어준다고나 할까요?

begin이 time1, done이 time2 를 가지고 있는 모습입니다.



그럼 묶여있는 값중 최하위 값을 불러오고 싶다~고 하시면 

file:///Users/Logan/Desktop/Screen%20Shot%202016-04-22%20at%2011.05.56%20pm 이런 컴퓨터디렉토리 주소처럼


done에 있는 hour값을 불러야겠죠?

done.hour은!?

done = > time2

time2:( hour:Int, min:int, sec:int ) = ( 1, 51, 15 ) => hour => 1

이라는 값이 나오게되겠죠?



이번에는 타입 얼라이어스입니다!

위 화면은 타입 얼라이어스를 설명하는 글입니다. 

typealias AudioSample = UInt16 이다.

var maxAmplitudeFound = AudioSample.min 이면, 0이다.

왜냐하면 UInt16의 최저값은 0이니까요.

이 처럼 타입 얼라이어스는 다른 이름으로 존재하는 값을 정의합니다.

time 이라는 타얼을 만들어 (h:int, m:int, s:int) 라는 타입을 정의하

period 라는 타얼을 만들어 start:time, end:time으로 타입을 정의했습니다.

period 타얼 안에 time의 타입이 들어갔지요? 



let now:period = ( (6,20,13) , (11,2,56) ) 로 start:time에 값을 주고 end:time에도 값을 각각 부여했습니다.


그럼 time이 start와 end로 된 period안에 들어가있고 start = 6,20,13이며, end는 11,2,56이네요.


print("we played a game until \(now.end.h) today. ") 라는 코드를 입력해


값을 불러오고자한다면, 추적해봅시다!


 now =  period, period =  (start:time. end:time) , end:time = 11,2,56 = h:11 , m:2, s:56 = h ==> 11 


이라는 결론에 도달하게 되는거죠!


이해가 되셨는지요!


쉽쥬?

반응형
by 밑바닥에서 글로벌로~ 발전소장 에르 :) 2016. 4. 23. 09:00
  • 학생 2018.01.02 14:44 ADDR EDIT/DEL REPLY

    typealias 에 대해서 궁금했는데 이해가 잘 되었습니다. 설명이 참 쉽고 핵심을 잘 알려주셔서 감사합니다.

| 1 |