Function
Terminology
function: isn't part of class or structure
free function: it's free because it's not owned by a named type like a structure or a class
method: part of class or structure
let passingGrade = 50
let chrisGrade = 49
let samGrade = 99
let chrisPassed = chrisGrade >= passingGrade
let samPassed = samGrade >= passingGrade
//------------------------------------
// default value가 있으면 파라미터가 없어도 된다.
func printPassStatus(for grade: Int, lowestPass: Int = passingGrade) {
print(grade >= lowestPass ? "You Passed!" : "You Failed!")
//true 면 앞 false 면 뒤
}
printPassStatus(for: samGrade, lowestPass: 90)
printPassStatus(for: chrisGrade, lowestPass: 100)
printPassStatus(for: chrisGrade)
// for은 function을 부를 때 씀 external parameter name, 사용을 outside of function이기 때문
// 오류: printPassStatus(samGrade) 파라미터명을 붙여줘야함 선언할 떄 붙였기 떄문 붙이고 싶지 않다면 아래처럼 하면됨
// 파라미터에 이름을 안붙이려면 _ 를 붙이면됨
func printHighestGrade(_ grade1: Int,_ grade2: Int) {
print(grade1 >= grade2 ? grade1 : grade2)
}
printHighestGrade(chrisGrade, samGrade)
// argument label은 붙이는게 낫다. 나중에 기억이 안날수도있기 때문!
Returns
function value를 리턴받으면 그 값을 저장할 수도 있다.
let passingGrade = 50
// Compound Type
typealias Student = (name: String, grade: Int, pet: String?)
// tuple
let chris: Student = (name: "Chris", grade: 49, pet: "Mango")
// let sam = (name: "Sam", grade: 99)
let sam: Student = (name: "Sam", grade: 99, pet: nil)
// 펫이 없는 경우를 튜플에 나타내고싶을 떄
func getPassStatus(for grade: Int, lowestPass: Int = 50) -> Bool {
grade >= lowestPass //body of function is oneline long이면 return을 안적어줘도 return된다.
}
let chrisPassStatus = getPassStatus(for: chris.grade)
let samPassStatus = getPassStatus(for: sam.grade)
let classPassStatus = getPassStatus(for: chris.grade) && getPassStatus(for: sam.grade)
// 진짜 펫이 있는 student만 통과시키고 싶어요.
func orderPetCollar(for student: Student) {
guard let pet = student.pet else { return }
//return 키워드를 바로 exit the function하고 쓰면 function을 불렀던 곳의 이후로 돌아간다. - 강아지가 없으면 function을 끝내라.
// 만약 강아지가 있다면
print("One custom collar for \(student.name), \(pet)")
}
orderPetCollar(for: chris)
orderPetCollar(for: sam)
'[iOS] App Development' 카테고리의 다른 글
[iOS] 기본 개념 정리 #2 : UISlider, Struct VS Class, ViewController (0) | 2021.10.30 |
---|---|
[iOS] 기본 개념 정리 #1 : struct(mutating), IBAction, IBOutlet, MVC, Optional, Parameter (0) | 2021.10.29 |
Sets (0) | 2021.03.08 |
[iOS/Swifit] Dictionary 사용법 (0) | 2021.03.08 |
While Loops / For Loops / Iterating Collections / Nested Loops (0) | 2021.03.05 |