본문 바로가기
Smart Device/Swift

Swift 함수 #5 closure expression

by 언덕너머에 2014. 6. 9.

Closure는 일종의 코드 블럭이다. 별도의 코드들을 하나로 묶어서 처리하는 기능이다.


- closure expression

  var numbers = [20, 19, 7, 12]

  numbers.map({

    (number: Int) -> Int in

     let result = 3 * number

     return result

  })

  반환값 : [60, 57, 21, 36]


- closure의 type을 알고 있다면 parameters나 반환값을 생략할 수 있습니다.

  numbers.map({ number in 3 * number })


- sort 예제

  sort([1, 5, 3, 12, 2]) { $0 > $1 }


- sort 예제

  let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]

  func backwards(s1: String, s2: String) -> Bool {

    return s1 > s2

  }

  var reversed = sorted(names, backwards)

  // reversed is equal to ["Ewa", "Daniella", "Chris", "Barry", "Alex"]


  위 코드와 아래 코드들은 같은 내용이다.

   reversed = sorted(names, { (s1: String, s2: String) -> Bool in return s1 > s2 } )

   reversed = sorted(names, { s1, s2 in return s1 > s2 } )

   reversed = sorted(names, { $0 > $1 } )

   reversed = sorted(names, >)


  func isCount(s1: String, s2: String) -> Bool {

      return count(s1) > count(s2)

  }

  var reversed2 = sorted(names, isCount)

  // reversed2 is equal to ["Daniella", "Chris", "Barry", "Alex", "Ewa"]


- map

  let digitNames = [

    0: "Zero", 1: "One", 2: "Two",   3: "Three", 4: "Four",

    5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"

  ]

  let numbers = [16, 58, 510]

  

  let strings = numbers.map {

    (var number) -> String in

    var output = ""

    while number > 0 {

      output = digitNames[number % 10]! + output

      number /= 10

    }

    return output

  }

  // strings is inferred to be of type String[]

  // its value is ["OneSix", "FiveEight", "FiveOneZero"]