4주차 강의는 swift에서 함수를 어떻게 다루는지를 실습코드들과 함께 학습하였다.
아래는 강의중 사용된 실습코드이며, 변수나 코드를 조금씩 변형하여 실습하였다.
if~let vs. guard~let
func printName(firstName:String, lastName:String?){
// if let
if let lName = lastName { // lastName이 nil이 아니면
print(lName,firstName)
}
else {
print("성이 없네요!")
}
// guard let
guard let lName = lastName else { // lastName이 nil이면
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
'대학교 - 강의 > iOS프로그래밍기초' 카테고리의 다른 글
| iOS프로그래밍기초 6주차 레포트 (0) | 2021.10.08 |
|---|---|
| iOS프로그래밍기초 5주차 레포트 (0) | 2021.10.02 |
| iOS프로그래밍기초 3주차 레포트 (0) | 2021.09.18 |
| iOS프로그래밍기초 2주차 레포트 (0) | 2021.09.10 |
| iOS프로그래밍기초 1주차 레포트 (0) | 2021.09.10 |