iOS Swift - Closure

longlivedrgn·2022년 8월 4일
0

swift문법

목록 보기
8/36
post-thumbnail

Closure

  • 기본 closure 꼴은 아래와 같이 두개의 형태이다.
1)
{(parameters) -> ReturnType in
    statements
}

2)
{statements}
  • Parameter와 returntype이 있는 closure
let c2 = {(str: String) -> String in
    return "Hello, \(str)"
}
  • Parameter와 returntype이 없는 closure
let c = { print("Hello, swift")}
c()

※ closure를 호출할 떄는 argument label을 호출하지 않는다.

let c2 = {(str: String) -> String in
    return "Hello, \(str)"
}

let result = c2("Closure")
print(result)

ex) - 상수로 저장 된 클로져를 argument로 전달하기

let c2 = {(str: String) -> String in
    return "Hello, \(str)"
}

//typealias SimpleStringClosure = (String) -> String


func perform(closure: (String)-> String){
    print(closure("iOS"))
}

perform(closure: c2)
==> c2("iOS")

Hello, iOS

ex)

let products = [
   "MacBook Air", "MacBook Pro",
   "iMac", "iMac Pro", "Mac Pro", "Mac mini",
   "iPad Pro", "iPad", "iPad mini",
   "iPhone Xs", "iPhone Xr", "iPhone 8", "iPhone 7",
   "AirPods",
   "Apple Watch Series 4", "Apple Watch Nike+"
]

// name 중 "Pro"를 가지고 있는 string을 참,거짓으로 나누고, 참인 것을 가져온다!
var proModels = products.filter({(name:String) -> Bool in
    return name.contains("Pro")
})

print(proModels)

Syntax Optimization

  • 클로져를 간단하게 표현해보기!
var proModels = products.filter({(name: String) -> Bool in
    return name.contains("Pro")
})

==

var proModels = products.filter({(name) in
    return name.contains("Pro")
})

==

// 첫번째 파라미터가 $0, 두번 째 파라미터가 $1
products.filter({
    return $0.contains("Pro")
})

==

products.filter({
    $0.contains("Pro")
})

==

products.filter(){
    $0.contains("Pro")
}

==

products.filter{
    $0.contains("Pro")
}

0개의 댓글