Multi Developer SuHo

iOS 프로그래밍 5주차 Report 본문

Swift 과제물

iOS 프로그래밍 5주차 Report

Dreaming Developer Student 2023. 10. 10. 09:28
SMALL

함수의 자료형 (함수의 리턴형) 

 

 

Argument label , Parameter name 

-  함수는 만들때 자료형 앞에 두개 씩 올수가 있다. 

함수이름

 -      함수의 이름  (외부 매개변수명) :  (외부 매개변수명)

 

 

ios 테이블뷰에서 많이 사용하는 메서드를 많이 사용하는 순서대로 나열하고,

예를 들어 기능을 설명하고, 전체 메서드 이름과 메서드 자료형 설명 

 

iOS에서 테이블 뷰는 주로 리스트 형태의 정보를 보여주는데 사용되며, 이를 위해 UITableViewDelegate와 UITableViewDataSource 프로토콜의 여러 메서드들을 활용합니다.

다음은 많이 사용하는 메서드들을 일반적인 사용 순서대로 나열하고 각각의 기능에 대해 설명한 것입니다:

  1. numberOfSections(in:): 테이블 뷰에 섹션의 개수를 정의합니다.
swift
func numberOfSections(in tableView: UITableView) -> Int
  1. tableView(_:numberOfRowsInSection:): 각 섹션별 row(행)의 개수를 정의합니다.
swift
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
  1. tableView(_:cellForRowAt:): 각 셀에 대한 내용과 스타일을 설정합니다.
swift
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
  1. tableView(_:didSelectRowAt:): 셀 선택 시 발생할 동작을 정의합니다.
swift
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
  1. tableView(_:heightForRowAt:): 각 셀마다 높이를 지정할 수 있습니다.
swift
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
  1. tableView(:titleForHeaderInSection:)**와 **tableView(:titleForFooterInSection:): 섹션 헤더와 푸터 제목을 지정할 수 있습니다.
swift
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String?
  1. tableView(_:commitEditingStyle:,forRowAtIndexPath:) : 셀 삭제 및 추가 등 수정 작업을 처리하기 위해 사용됩니다.
swift
func tableview (_ tableview :UITableView , commit editingStyle :UITableViewCell .EditingStyle , forRowatIndexPath indexpath :NSIndexPath )

위 메서드들은 모두 UITableViewDelegate나 UITableViewDataSource 프로토콜에서 요구하는 메서드입니다.

그 외에도 다양한 커스터마이징과 상호작용 처리를 위한 다른 delegate 및 datasource 메소드들이 있으니 상황에 따라 필요한 메소드를 찾아 활용하시면 됩니다

 

디폴트 인자

 호출할때 argument로 안넣어주면 디폴트 인자로 할당한다. 

 

 

디폴트 인자를 사용하는 모든 언어들 정리

디폴트 인자(또는 기본값 인자)를 지원하는 프로그래밍 언어들은 여러가지가 있습니다. 다음은 그 중 일부입니다:

  1. Python: 함수 정의 시에 인자에 기본값을 할당할 수 있습니다.
python
def greet(name="World"):
    print(f"Hello, {name}!")
  1. JavaScript (ES6 이후): ES6부터 디폴트 파라미터를 지원합니다.
javascript
function greet(name = "World") {
    console.log(`Hello, ${name}!`);
}
  1. C++: C++에서도 함수 선언 시 디폴트 인자를 제공할 수 있습니다.
cpp
void greet(std::string name = "World") {
    std::cout << "Hello, " << name << "!\n";
}
  1. Swift: Swift에서도 함수나 메서드를 선언할 때 디폴트 값을 설정할 수 있습니다.
swift
func greet(name: String = "World") {
    print("Hello, \(name)!")
}
  1. Kotlin: Kotlin 역시 기본값 인자를 지원합니다.
kotlin
fun greet(name: String = "World") {
    println("Hello, $name!")
}
  1. Ruby: Ruby에서도 메서드 정의 시에 기본값을 설정할 수 있습니다.
ruby
def greet(name="World")
  puts "Hello, #{name}!"
end

이 외에도 많은 프로그래밍 언어들이 이와 같은 기능을 제공하고 있으니 필요한 언어의 문법 가이드 또는 참조 문서에서 확인해보시면 좋겠습니다!

 

 

함수의 리턴형으로 튜플을 사용하게 되면 여러개의 값들을 동시에 리턴할 수 있다. 

 

함수로부터 반환

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) //과제
 

함수 추가 ( Winner 함수 추가) 

func converter(length: Float) -> (yards: Float, centimeters: Float, meters: Float, winner: Float) {
let yards = length * 0.0277778
let centimeters = length * 2.54
let meters = length * 0.0254
let winner = length + 1
return (yards, centimeters, meters, winner)
}
var lengthTuple = converter(length:10)
print(lengthTuple) //과제
print(lengthTuple.yards) //과제
print(lengthTuple.centimeters) //과제
print(lengthTuple.meters) //과제
print(lengthTuple.winner)
 
Swift 언어에서 Foundation FrameWork  기능

 

import Foundation
func sss(x : Int, y : Int) -> (sum : Int, sub : Int, div : Double, total : Int)
{
let sum = x+y
let sub = x-y
let total = x*y
let div = Double(x)/Double(y) //같은 자료형만 연산 가능
return (sum, sub, div, total)
}
var result = sss(x:10,y:3)
print(result.sum)
print(result.sub)
print(result.div)
print(result.total)
print(String(format: "%.2f",result.div))
 

Swift에서 Foundation 프레임워크는 다양한 기본적인 데이터 타입과 유틸리티들을 제공합니다. 이 프레임워크는 애플리케이션의 핵심 기능 구현에 필요한 여러 요소를 포함하고 있습니다.

Foundation 프레임워크의 주요 기능은 다음과 같습니다:

  1. 데이터 타입: String, Date, Data, URL 등의 기본적인 데이터 타입을 제공합니다.
  2. 컬렉션 타입: 배열(Array), 사전(Dictionary), 세트(Set) 등의 컬렉션 타입을 제공합니다.
  3. 날짜와 시간: 날짜(Date)와 시간 간격(TimeInterval) 처리, 날짜 형식 지정자 (DateFormatter), 달력 연산 (Calendar) 등 날짜와 시간 관련된 클래스와 메서드를 제공합니다.
  4. 파일 및 디렉토리 관리: 파일 시스템에 접근하고 파일 및 디렉토리를 읽고 쓰는 데 사용되는 클래스 (FileManager, FileHandle 등)를 제공합니다.
  5. 네트워킹: URL 로딩 시스템을 활용해 HTTP/HTTPS 요청을 처리하는 데 사용되는 클래스 (URLSession, URLRequest 등)를 제공합니다.
  6. 유틸리티: 텍스트 처리, 정규 표현식, JSON 인코딩/디코딩, UUID 생성 등 다양한 유틸리티 기능을 지원합니다.
  7. 런루프(RunLoop): 이벤트 처리 루프인 런루프 관리도 Foundation에서 수행됩니다.
  8. KVO(Key-Value Observing) & KVC(Key-Value Coding): 객체 속성의 변화를 감시하거나 동적으로 객체 속성에 접근할 수 있는 KVO/KVC 메커니즘도 Foundation이 제공하는 중요한 부분입니다.

위 내용은 Foundation 프레임워크가 가진 많은 기능 중 일부입니다.

 

가변 매개변수   "..."(variadic parameter ) 를 사용하면 // 가변 매개변수: String 형이 몇개가 와도  관계가 없다는 의미이다. 

func add(numbers: Int...)
{
var sum=0
for x in numbers {
sum += x
}
print(sum)
}
add(numbers:1,2,3) //6
add(numbers:2,2,2,2,2) //10
add(numbers:1,1,1,1,1,1,1,1,1,1) //10
add(numbers:1,1,1,1) //4

 

print 함수에서 쓰이는 Variadic Parameter 와 디폴트 인자 

for n in 1...5 {
print(n, terminator: " ")
}
// print 함수는 variadic parameter 를 쓰고 디폴트 인자를 가지고 있다.

 

// ... 은 variadic parameter 이고 separator는 디폴트인자를 가지고 있다
 
 
Swift 3 부터는 주소를 넘길때 자료형 앞에 "inout"을 써줘야 한다
var myValue = 10
func doubleValue (value : inout Int) -> Int { //주소를 넘길땐 자료형 앞에 inout을 써줘야 한다
value += value
return(value)
}
print(myValue)
print(doubleValue(value : &myValue))
print(myValue)

 

 

BMI 를 체크하는 소스

import Foundation
//let weight = 60.0
//let height = 170.0
func calcBMI(weight : Double, height : Double) -> String{
 

 

let bmi = weight / (height*height*0.0001) // kg/m*m
let shortenedBmi = String(format: "%.lf", 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 : 60.2, height : 170.2))

 

 

Switch ~ case  BMI 판정 결과를 리턴하는 소스

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))

 

Javascript 언어에서 1급 객체 예제 소

자바스크립트에서 함수는 1급 객체(first-class objects)로 취급됩니다. 이는 함수를 다른 객체들처럼 다룰 수 있다는 것을 의미하며, 아래와 같은 특징들을 가집니다:

  1. 변수에 할당 가능: 함수를 변수에 할당할 수 있습니다.
javascript
let myFunction = function() {
    console.log('Hello, World!');
};
myFunction(); // 출력: Hello, World!
  1. 다른 함수의 인자로 전달 가능: 함수를 다른 함수의 매개변수로 전달할 수 있습니다.
javascript
function greet(func) {
    func();
}
let sayHello = function() {
    console.log('Hello!');
};
greet(sayHello); // 출력: Hello!
  1. 함수에서 반환값으로 사용 가능: 함수가 다른 함수를 반환할 수 있습니다.
javascript
function createGreeting(name) {
    return function() {
        console.log(`Hello, ${name}!`);
    };
}
let greetJohn = createGreeting('John');
greetJohn(); // 출력: Hello, John!
  1. 동적으로 프로퍼티를 가질 수 있음: 자바스크립트의 모든 객체처럼, 함수도 동적으로 프로퍼티를 추가하거나 변경할 수 있습니다.
javascript
let myFunction = function() {
    console.log('Hello, World!');
};
myFunction.customProperty = 'Custom Value';
console.log(myFunction.customProperty); // 출력: Custom Value

 

Swift 에서 함수는 1급 객체이다

func up(num: Int) -> Int {
return num + 1
}
func down(num: Int) -> Int {
return num - 1
}
let toUp = up
print(up(num:10))
print(toUp(10))
print(type(of:up))
print(type(of:toUp))
let toDown = down
print(down(num:10))
print(toDown(10))
print(type(of:down))
print(type(of:toDown))

 

// 함수를 대입 할 수 있지만 argument label 을 할수가 없다.
 

Swift 함수는 1급 객체다

 

 

func up(num: Int) -> Int {
return num + 1
}
func down(num: Int) -> Int {
return num - 1
}
let toUp = up
print(up(num:10))
print(toUp(10))
let toDown = down
func upDown(Fun: (Int) -> Int, value: Int) {
let result = Fun(value)
print("결과 = \(result)")
}
upDown(Fun:toUp, value: 10) //toUp(10)
upDown(Fun:toDown, value: 10) //toDown(10)
func decideFun(x: Bool) -> (Int) -> Int {
//매개변수형 리턴형이 함수형
if x {
return toUp
} else {
return toDown
}
}
let r = decideFun(x:false) // let r = toUp
print(type(of:r)) //(Int) -> Int
print(r(10)) // toUp(10)

 

guard 문 

 

guard~let 

guard let~ else 

if let 과 guard let else 문 

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)

 

LIST