본문 바로가기

대학교 - 강의/iOS프로그래밍기초

iOS프로그래밍기초 4주차 레포트

4주차 강의는 swift에서 함수를 어떻게 다루는지를 실습코드들과 함께 학습하였다.

아래는 강의중 사용된 실습코드이며, 변수나 코드를 조금씩 변형하여 실습하였다.

 

if~let vs. guard~let

func printName(firstName:String, lastName:String?){

// if let

if let lName = lastName { // lastNamenil이 아니면

print(lName,firstName)

}

else {

print("성이 없네요!")

}

// guard let

guard let lName = lastName else { // lastNamenil이면

print("성이 없네요!")

return // early exit

}

print(lName,firstName)

}

printName(firstName: "준현", lastName:"")

printName(firstName: "준현", lastName:nil)

/*

경 준현

경 준현

성이 없네요!

성이 없네요!

*/

 

guard

func multiplyByTen(number: Int?) {

guard let number = number, number <10 else {//조건식(값이 있고 10보다 작은)이 거짓일 때 실행

print("수가 없거나 10보다 크다.") //거짓 : 값이 없거나 10보다 크면

return

}

print(number *10) //조건식이 참일 때 실행, 주의 : number를 여기서도 사용 가능

}

multiplyByTen(number: 31) //수가 없거나 10보다 크다.

multiplyByTen(number: 9) //90

multiplyByTen(number: nil) //수가 없거나 10보다 크다.

 

switch case문 예제

let someCharacter: Character =""

switch someCharacter {

case "":

print("한글의 첫번째 문자입니다.")

case "":

print("한글의 마지막 문자입니다.")

default:

print("다른 문자입니다.")

}

//한글의 첫번째 문자입니다.

 

switch - case문 결합하기

let anotherCharacter: Character =""

switch anotherCharacter {

case "", "":

print("한글의 기역자 입니다.")

default:

print("기역자가 아닙니다.")

}

//한글의 기역자 입니다.

 

switch - case 문에서의 범위 지정 매칭

let num =9999

let count : String

switch num {

case 0...9:

count ="한자리 수"

case 10...99:

count ="두자리 수"

case 100...999:

count ="세자리 수"

default:

count ="네자리 수 이상"

}

print("\(count)입니다.")

//네자리 수 이상입니다.

 

switch - case 에서 where절 사용하기

var numRepeat =60

var number =3

var count =0

for num in 0..<numRepeat where num % number ==0 {

count = count +1

}

print(numRepeat,"까지의 숫자중",number,"의 배수는",count,"개 입니다.")

//60 까지의 숫자중 3 의 배수는 20 개입니다.

 

fallthrough

var value =6

switch (value)

{

case 4:

print("4")

fallthrough

case 3:

print("3")

fallthrough

case 2:

print("2")

fallthrough

default:

print("1")

} //1, if value = 3, 3, 2, 1

 

switch-case문으로 변경하기

let weight =60.0

let height =170.0

let bmi = weight / (height *height *0.0001) // kg/m*m

var body =""

switch bmi

{

case 18.5..<25:

body ="정상"

case 25..<30:

body ="1단계 비만"

case 30..<40:

body ="2단계 비만"

case 40...:

body ="3단계 비만"

default:

body ="저체중"

}

print("BMI:\(bmi), 판정:\(body)")

//BMI:20.761245674740483, 판정:정상

 

C 언어에서 Swift 함수 변경 연습

func add(x: Int, y: Int) ->Int {

print(#function) //add(x:y:)

return(x +y)

}

print(type(of:add)) //(Int, Int) -> Int

print(add(x:10, y:20)) //30

 

Swift 함수 실습( 과제 : 매우 중요 )and 함수의 type?

func add(x: Int, y: Int) ->Int{

print(#function)

return(x +y)

}

print(type(of:add(x:y:)))

print(add(x:10, y:20))

//(Int, Int) -> Int

//add(x:y:)

//30

func add(first x: Int, second y: Int) ->Int{

print(#function)

return(x +y)

}

print(type(of:add(first:second:)))

print(add(first:10, second:20))

//(Int, Int) -> Int

//add(first:second:)

//30

func add(_ x: Int, _ y: Int) ->Int{

print(#function)

return(x +y)

}

print(type(of:add(_:_:)))

print(add(10,20))

//(Int, Int) -> Int

//add(_:_:)

//30

func add(first x: Int, _ y: Int) ->Int{

print(#function)

return(x +y)

}

print(type(of:add(first:_:)))

print(add(first:10,20))

//(Int, Int) -> Int

//add(first:_:)

//30

 

C/C++ 함수 vs. Objective-C 함수

var xx =0

var yy =0

func ddd(x:Int) ->Int

{

return(x *2)

}

func setX(x:Int) ->Void //생략가능

{

xx=x

}

func getX()

{

print("아무것도 안받았어용");

}

func add(x:Int, y:Int) ->Int

{

return(x +y)

}

func setXY(x:Int, y:Int)

{

xx=x

yy=y

}

print(ddd(x:10)) //20

setX(x:10)

print(xx) //10

getX() //아무것도 안받았어용

print(add(x:10,y:20)) //30

setXY(x:40,y:20)

print(xx,yy) //40 20

 

함수로부터 여러 개의 결과 반환하기

func converter(length: Float) -> (yards: Float, centimeters: Float, meters: Float) {

let yards = length *0.0277778

let centimeters = length *2.54

let meters = length *0.0254

return (yards, centimeters, meters)

}

var lengthTuple = converter(length:35)

print(lengthTuple) //(yards: 0.972223, centimeters: 88.9, meters: 0.889)

print(lengthTuple.yards) //0.972223

print(lengthTuple.centimeters) //88.9

print(lengthTuple.meters) //0.889

 

과제 : 2 개의 정수를 입력받아 가감제 리턴

import Foundation

func sss(x : Int, y : Int) -> (sum : Int, sub : Int, div : Double, mult : Double, rem : Int)

{

let sum = x +y

let sub = x -y

let div = Double(x)/Double(y) //같은 자료형만 연산 가능

let mult = Double(x)*Double(y)

let rem =Int(x)%Int(y)

return (sum, sub, div, mult, rem)

}

var result = sss(x:10,y:3)

print(result.sum) //13

print(result.sub) //7

print(result.mult) //30.0

print(result.rem) //1

print(String(format: "%.3f", result.div)) //3.333

print(type(of:sss)) //(Int, Int) -> (sum: Int, sub: Int, div: Double, mult: Double, rem: Int)

 

가변 매개변수(variadic parameter)

func add(num : Int...){

var sum : Int =0

for count in num{

sum += count

}

print(sum)

}

add(num:1,6,7,8,11) //33

 

Swift 3 에서는 inout의 의 위치가 바뀜

var myValue =10

func doubleValue (value: inout Int) ->Int {

value += value

return(value)

}

print(myValue) //10

print(doubleValue(value : &myValue)) //20 call by reference로 주소를 넣음 10+10=20

print(myValue) //20, myValue