VesselWheel

Closure 본문

Xcode Study

Closure

JasonYang 2023. 10. 16. 14:37

import UIKit

 

/*

   Closure

 

 {(parameters) -> ReturnType in

   명령문....

 }

 */

 

// 함수를 상수 c 에 할당함

let c = {print("Hello, Swift !!")}

c()

 

let c2 = { (str1: String) -> String in

            return "Hello, \(str1)"

         }

let result = c2("더조은")

print(result)

 

// closure 를 parameter 로 전달하기

//             ㄴ argument 로 넣는다는 의미

typealias SimpleStringClosure = (String) -> String

func perform(closure: SimpleStringClosure){

    print(closure("아카데미"))

}

perform(closure: c2)

print(c2("아카데미"))

 

perform(closure: { (str1: String) -> String in

    return "Hello, \(str1)"

 })

 

var products = ["macbook pro", "air", "iphone", "apple", "ipad pro", "apple watch", "mac pro"]

 

var proModels = products.filter({

                    (name: String) -> Bool in

                    return name.contains("pro")

                })

// parameter type 과 return type 생략하기

products.filter({(name)  in

                    return name.contains("pro")

                })

// parameter name 과 in 키워드도 생략함

products.filter({

    return $0.contains("pro")

})

 

 

print(proModels)

print(proModels.sorted())

print(products.sorted())

 

print("----------------------------")

products.sort(by: {(lhs: String, rhs: String) -> Bool in

    return lhs.description.caseInsensitiveCompare(rhs)

          == .orderedAscending

})

 

 

proModels.sort(by: {(lhs: String, rhs: String) -> Bool in

    return lhs.description.caseInsensitiveCompare(rhs)

          == .orderedAscending

})

// parameter type 과 return type 생략하기

proModels.sort(by: {(lhs, rhs) in

    return lhs.description.caseInsensitiveCompare(rhs)

          == .orderedAscending

})

// parameter name 과 in 키워드도 생략함

proModels.sort(by: {

    return  $0.description.caseInsensitiveCompare($1)

          == .orderedAscending

})

// closure 내부에 return 문만 있으면 return 키워드 생략

proModels.sort(by: {

    $0.description.caseInsensitiveCompare($1)

          == .orderedAscending

})

// closure 함수가 마지막 파라미터인 경우,

// 함수(sort()) 밖에 작성함

proModels.sort(by:){

    $0.description.caseInsensitiveCompare($1)

          == .orderedAscending

}

// argument label 생략

proModels.sort(){

    $0.description.caseInsensitiveCompare($1)

          == .orderedAscending

}

// sort() 안에 argument 가 없으면 () 도 생략

proModels.sort{

    $0.description.caseInsensitiveCompare($1)

          == .orderedAscending

}

'Xcode Study' 카테고리의 다른 글

tuple  (0) 2023.10.16
값 캡쳐하기 : capturing values  (0) 2023.10.16
내부 함수 : nested functions  (0) 2023.10.16
function type - 함수의 자료형(2/2)  (0) 2023.10.16
function type - 함수의 자료형(1/2)  (1) 2023.10.14