Swift의 클로저
Closures are self-contained blocks of functionality that can be passed around and used in your code.
다른 언어의 람다와 유사하며 고차 함수에서 사용할 수 있습니다.
스위프트에서는 클로저를 사용하여 함수를 변수로 나타낼 수 있습니다.
아래 코드 스니펫을 사용하여 함수 작성에서 클로저 작성으로 이동하고 함수를 클로저로 변환하는 방법을 배웁니다.
func fullName(firstName: String, lastName: String) -> String{
return "The Full Name is \(firstName) \(lastName)"
}
print(fullName(firstName: "Promise", lastName: "Ochornma"))
//The Result is:
//The Full Name is Promise Ochornma
위의 코드는 이름과 성을 전체 이름으로 연결하는 함수입니다.
이제 아래와 같이 클로저로 변환합니다.
let fullName: (String, String) -> String = { (firstName, lastName) in
return "The Full Name is \(firstName) \(lastName)"
}
print(fullName("Promise", "Ochornma"))
//The Result is:
//The Full Name is Promise Ochornma
위의 코드 조각에서 클로저를 사용하여 fullName 함수를 fullName이라는 변수로 변환했습니다.
두 코드 모두 동일한 결과를 출력합니다.
"이름은 약속의 오호른마"
아래 코드 조각에서 볼 수 있듯이 달러 기호를 사용하여 클로저를 단순화할 수도 있습니다.
첫 번째 매개변수는 $0, 두 번째 매개변수는 $1로 표시됩니다. 즉, n개의 매개변수가 있는 경우 $p-1을 사용하여 각각 위치 p에서 액세스할 수 있으며 전체 매개변수는 $0...$n-1 범위에 있습니다.
let fullName: (String, String) -> String = {
return "The Full Name is \($0) \($1)"
}
print(fullName("Promise", "Ochornma"))
//The Result is:
//The Full Name is Promise Ochornma
클로저 배열
클로저는 변수로 표현되는 함수이기 때문에 클로저 배열을 생성할 수 있습니다.
스위프트에 따르면documentation
An array stores values of the same type in an ordered list. The same value can appear in an array multiple times at different positions.
이는 배열의 모든 클로저가 동일한 유형이어야 하고 특정 클로저가 다른 위치에 있을 수 있음을 의미합니다.
일반적인 배열과 마찬가지로 for-in 루프를 사용하여 배열을 반복하고 + 기호를 사용하여 두 개의 배열을 추가하고 추가 방법을 사용하여 새 항목을 추가할 수 있습니다.
이제 클로저 배열을 만들고 사용하는 방법을 살펴보겠습니다.
let plus: (Int, Int) -> Int = {
return $0 + $1
}
let minus: (Int, Int) -> Int = {
return $0 - $1
}
let add: (Int, Int) -> Int = {
return $0 + $1
}
let subtract: (Int, Int) -> Int = {
return $0 - $1
}
let closureFunctions = [ plus, minus ]
let plusSign = closureFunctions[0]
print(plusSign(1, 5))
//result is:
//6
//The append method
closureFunctions.append(add)
closureFunctions.append(subtract)
print(closureFunctions.count)
//result is:
//4
for closure in closureFunctions {
print(closure(6,5))
}
//result is:
//11
//1
//11
//1
let addition: (Int, Int) -> Int = {
return $0 + $1
}
let subtraction: (Int, Int) -> Int = {
return $0 - $1
}
let closureFunctions2= [ addition, subtraction ]
let newClosureFunction = closureFunctions + closureFunctions2
print(newClosureFunction.count)
//result is:
//6
폐쇄 사전
스위프트에 따르면documentation
A dictionary stores associations between keys of the same type and values of the same type in a collection with no defined ordering. Each value is associated with a unique key, which acts as an identifier for that value within the dictionary. Unlike items in an array, items in a dictionary don’t have a specified order. You use a dictionary when you need to look up values based on their identifier, in much the same way that a real-world dictionary is used to look up the definition for a particular word.
let plus: (Int, Int) -> Int = {
return $0 + $1
}
let minus: (Int, Int) -> Int = {
return $0 - $1
}
let add: (Int, Int) -> Int = {
return $0 + $1
}
let subtract: (Int, Int) -> Int = {
return $0 - $1
}
let closureFunctions = ["plus": plus, "minus" : minus ]
let plusSign = closureFunctions["plus"]
print(plusSign(1, 5))
//result is:
//6
//Add a new value to the dictionary
closureFunctions["add"] = add
closureFunctions["subtract"] = subtract
print(closureFunctions.count)
//result is:
//4
for (key, value) in closureFunctions {
print("(\(key),\(value(5, 6)))")
}
//result is:
//(plus, 11)
//(minus, 1)
//(add, 11)
//(subtract, 1)
Reference
이 문제에 관하여(Swift의 클로저), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ochornma/closures-in-swift-2p1m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)