카테고리 없음

iOS 프로그래밍 기초 5주차

sw0913 2024. 10. 14. 18:53

함수명과 함수자료형(type)

 

1. tableView(_:cellForRowAt:)

  • 역할: 테이블 뷰에 표시할 셀을 반환하는 메서드입니다. 각 행의 셀을 커스터마이징할 때 사용됩니다.
  • 설명: 주어진 인덱스 경로(indexPath)에 해당하는 셀을 반환합니다. 이 메서드에서 셀의 내용을 설정하고, 커스텀 셀을 사용하는 경우 그 셀을 초기화합니다.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

2. tableView(_:numberOfRowsInSection:)

  • 역할: 섹션 내에 있는 행의 개수를 반환하는 메서드입니다.
  • 설명: 주어진 섹션에 몇 개의 행이 있어야 하는지 알려주는 메서드입니다. 데이터 소스의 크기에 따라 값이 다릅니다.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

3. numberOfSections(in:)

  • 역할: 테이블 뷰에 표시할 섹션의 수를 반환하는 메서드입니다.
  • 설명: 테이블 뷰의 섹션 개수를 설정합니다. 섹션이 하나라면 이 메서드는 1을 반환합니다.
func numberOfSections(in tableView: UITableView) -> Int

4. tableView(_:didSelectRowAt:)

  • 역할: 사용자가 테이블 뷰에서 특정 행을 선택했을 때 호출되는 메서드입니다.
  • 자료형:
    swift
    코드 복사
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
  • 설명: 선택된 행에 대한 처리를 정의하는 데 사용됩니다. 예를 들어, 선택된 셀에 대한 세부 정보 화면을 표시할 때 사용됩니다.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

5. tableView(_:heightForRowAt:)

  • 역할: 각 행의 높이를 설정하는 메서드입니다.
  • 설명: 특정 행의 높이를 커스터마이징할 수 있습니다. 고정된 높이를 사용하거나 조건에 따라 다른 높이를 반환할 수 있습니다.
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

6. tableView(_:viewForHeaderInSection:)

  • 역할: 섹션 헤더에 커스텀 뷰를 제공하는 메서드입니다.
  • 설명: 섹션의 헤더 부분에 커스텀 뷰를 표시할 때 사용됩니다. 기본 텍스트 대신 커스텀 디자인을 적용하고 싶을 때 유용합니다.
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

7. tableView(_:commit:forRowAt:)

  • 역할: 테이블 뷰에서 행을 삭제하거나 삽입하는 메서드입니다.
  • 설명: 사용자가 셀을 삭제하거나 삽입할 때 호출되며, 삭제/삽입 작업을 처리할 수 있습니다.
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)

8. tableView(_:canEditRowAt:)

  • 역할: 특정 행이 편집 가능한지 여부를 반환하는 메서드입니다.
  • 설명: 셀을 편집할 수 있는지(삭제, 삽입) 여부를 결정합니다. 기본적으로 true 또는 false를 반환하여 셀이 편집 가능한지 결정합니다.
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool

9. tableView(_:canMoveRowAt:)

  • 역할: 특정 행을 이동할 수 있는지 여부를 반환하는 메서드입니다.
  • 설명: 셀을 다른 위치로 이동할 수 있는지 결정하는 메서드입니다.
func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool

10. tableView(_:moveRowAt:to:)

  • 역할: 테이블 뷰의 특정 셀을 다른 위치로 이동시키는 메서드입니다.
  • 설명: 사용자가 셀을 드래그해서 이동할 때 호출되며, 데이터 소스에서 행의 위치를 업데이트할 수 있습니다.
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)

 

 

함수안에서 guard문은 많이 사용이 됩니다.

 

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

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:10)
print(lengthTuple) 
print(lengthTuple.yards) 
print(lengthTuple.centimeters) 
print(lengthTuple.meters)

 

결과

 

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

func sss(x : Int, y : Int) -> (sum : Int, sub : Int, div : Double)
{
let sum = x+y
let sub = x-y
let div = Double(x)/Double(y) //같은 자료형만 연산 가능
return (sum, sub, div)
}
var result = sss(x:10,y:3)
print(result.sum)
print(result.sub)
print(result.div)

결과

 

BMI 계산 결과 판정

let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m
var body = ""
if bmi >= 40 {
body = "3단계 비만"
} else if bmi >= 30 && bmi < 40 {
body = "2단계 비만"
} else if bmi >= 25 && bmi < 30 {
body = "1단계 비만"
} else if bmi >= 18.5 && bmi < 25 {
body = "정상"
} else {
body = "저체중"
}
print("BMI:\(bmi), 판정:\(body)")

결과

 

Swift 문자열 서식(swift string format)

import Foundation
let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m
let shortenedBmi = String(format: "%.1f", bmi)
var body = ""
if bmi >= 40 {
body = "3단계 비만"
} else if bmi >= 30 && bmi < 40 {
body = "2단계 비만"
} else if bmi >= 25 && bmi < 30 {
body = "1단계 비만"
} else if bmi >= 18.5 && bmi < 25 {
body = "정상"
} else {
body = "저체중"
}
print("BMI:\(shortenedBmi), 판정:\(body)")

결과

 

BMI를 판정하는 calcBMI()함수 정의

import Foundation

func calcBMI(weight: Double, height: Double) -> String {
    let bmi = weight / (height * height * 0.0001) // kg/m*m
    let shortenedBmi = String(format: "%.1f", bmi)
    
    var body = ""
    if bmi >= 40 {
        body = "3단계 비만"
    } else if bmi >= 30 && bmi < 40 {
        body = "2단계 비만"
    } else if bmi >= 25 && bmi < 30 {
        body = "1단계 비만"
    } else if bmi >= 18.5 && bmi < 25 {
        body = "정상"
    } else {
        body = "저체중"
    }
    
    return "BMI: \(shortenedBmi), 판정: \(body)"
}

print(calcBMI(weight: 62.5, height: 172.3))

 

if~else를 switch~case로

import Foundation
func calcBMI (weight : Double, height : Double) { //Void형
let bmi = weight / (height*height*0.0001) // kg/m*m
let shortenedBmi = String(format: "%.1f", bmi)
switch bmi {
case 0.0..<18.5:
print("BMI:\(shortenedBmi),판정:저체중")
case 18.5..<25.0 :
print("BMI:\(shortenedBmi),판정:정상")
case 25.0..<30.0 :
print("BMI:\(shortenedBmi),판정:1단계 비만")
case 30.0..<40.0 :
print("BMI:\(shortenedBmi),판정:2단계 비만")
default :
print("BMI:\(shortenedBmi),판정:3단계 비만")
}
}
calcBMI(weight:62.5, height: 172.3)

 

switch~case + 판정 결과 리턴하는 함수

import Foundation
func calcBMI(weight : Double, height : Double) -> String {
let bmi = weight / (height*height*0.0001) // kg/m*m
let shortenedBmi = String(format: "%.1f", bmi)
var body = ""
switch bmi {
case 0.0..<18.5:
body = "저체중"
case 18.5..<25.0:
body = "정상"
case 25.0..<30.0:
body = "1단계 비만"
case 30.0..<40.0 :
body = "2단계 비만"
default :
body = "3단계 비만"
}
return "BMI:\(shortenedBmi), 판정:\(body)"
}
print(calcBMI(weight:60.0, height: 170.0))

 

1급 객체와 1급 시민

Swift의 함수는 1급 객체입니다.

1급 객체 또는 1급 시민이라고 하는데요

- 다음 조건에 충족하는 객체를 1급 객체라고 합니다.

1) 변수에 저장할 수 있다.

2) 매개변수로 전달할 수 있다.

3) 리턴값으로 사용할 수 있다.

 

Swift는 함수를 데이터 타입처럼 처리 할 수 있음.

unc inchesToFeet (inches: Float) -> Float {
return inches * 0.0833333
}
let toFeet = inchesToFeet //함수를 자료형처럼 사용
//함수를 호출하려면 원래의 함수 이름 대신에 상수 이름을 이용하여 호출 가능
print(inchesToFeet(inches:10)) 
print(toFeet(10))

함수를 매개변수로 사용이 가능함.

 

func inchesToFeet (inches: Float) -> Float {
return inches * 0.0833333
}
let toFeet = inchesToFeet
 위 함수는 Float형 매개변수, Float형 결과를 반환하기 때문에 함수의 데이터 타입(자료 형)
(Float) -> Float // (매개변수형) -> 리턴형
 Int와 Double형을 매개변수로 받아서 String을 반환하는 함수의 데이터 타입
(Int, Double) -> String // (매개변수형, 매개변수형) -> 리턴형
 매개변수로 함수를 받으려면, 함수를 받게 될 함수는 함수의 데이터 타입을 선언함
func outputConversion(converterFunc: (Float) -> Float, value: Float) {//함수를 매개변수로 사용
let result = converterFunc(value) //toFeet(10)
print("Result = \(result)")
}
outputConversion(converterFunc:toFeet, value: 10) // 피트로 변환하는 inchesToFeet함수 호출

함수를 리턴값으로 사용

unc inchesToFeet (inches: Float) -> Float {
return inches * 0.0833333
}
func inchesToYards (inches: Float) -> Float {
return inches * 0.0277778
}
let toFeet = inchesToFeet
let toYards = inchesToYards
//단위를 변환하고 콘솔에 결과를 출력하는 다른 함수
func outputConversion(converterFunc: (Float) -> Float, value: Float) { //함수를 매개변수로 사용
let result = converterFunc(value)
print("Result = \(result)")
}
//outputConversion 함수를 호출할 때 선언된 데이터 타입과 일치하는 함수를 전달
//매개변수로 적절한 변환 함수를 전달하면 인치를 피트 또는 야드로 변환하기 위하여 동일한 함수가 호출될 수 있음
outputConversion(converterFunc:toYards, value: 10) // 야드로 변환하는 inchesToYards함수 호출
outputConversion(converterFunc:toFeet, value: 10) // 피트로 변환하는 inchesToFeet함수 호출
//반환 타입으로 함수의 타입을 선언하면 함수도 반환될 수 있음
//다음 함수는 Boolean 매개변수의 값에 따라 toFeet 함수 또는 toYards 함수를 반환
func decideFunction (feet: Bool) -> (Float) -> Float
{ //매개변수형 리턴형이 함수형
if feet {
return toFeet //함수를 리턴
} else {
return toYards
}
}

 

클로저(Closure)

클로저 표현식

클로저: 특정 작업(함수)과 그 작업이 일어난 곳(환경, 상태)을 모두 기억하고 있는도구

- 클로저 표현식은 독립적은 코드 블록이에요

unc add(x: Int, y: Int) -> Int {
return(x+y)
}
print(add(x:10, y:20))
let add1 = { (x: Int, y: Int) -> Int in
return(x+y)
}
print(add1(x:10, y:20)) 
print(add1(10, 20)) 
print(type(of:add1))

- 클로저 표현식은 매개변수를 받거나, 값을 반환하도록 만들 수도 있음 

(<매개변수 이름>: <매개변수 타입>, … ) -> <반환 타입> in // 클로저 표현식 코드 }

- 두 개의 정수 매개변수를 받아서 정수 결과 값을 반환

et multiply = {(val1: Int, val2: Int) -> Int in
//매개변수 리턴형
return val1 * val2
}// 여기서 multiply의 자료형은 (Int, Int) -> Int
let result = multiply(10, 20) //상수를 함수처럼 호출,200

 

출처: SmileHan Smile Han - YouTube