[iOS] App Development

[Swift/iOS] Functions and Return / Typealias / Compound Type

ddgoori 2021. 3. 9. 20:53

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)