Closure Örnekleri

Closure, fonksiyonların aksine ismi olmadan parametre alıp bir değer döndüren, bir değişkende saklanabilen bir kod bloğu yapısıdır.

Closure syntax olarak nasıl göründügüne örnek vermek gerekirse:

let exampleClosure = { (parameters) -> returntype in
    statements
}

UIKit kütüphanesinden bir örnek vermek gerekirse de:

let button = UIButton(type: .system, primaryAction: UIAction(title: "Button Title", handler: { action -> Void in
    print("Button with title \(action.title) tapped!")
}))

Örnekleri zenginleştirmek gerekirse.

Parametre almayan ve geriye değer döndürmeyen bir closure

var sayHello:() -> Void = {
	print("Hello")
}

Yukarıdaki örneği hem parametre alan hem de parametre döndüren bir formata çevirirsek

var sayHello:(String) -> String = { (value) in 
	return "Hello \(value)"
}

2 parametre alan bir örneğe çevirirsek de

var sayHello: (String,String) -> String = { (value1, value2) in 
	return "Hello \(value1) and \(value2)"
}

Closure'larda kısaltmalar,  sıklıkla kullanılan ve karşımıza da sık sık çıkan bir yöntemdir. Farklı bir örnekte göstermek gerekirse,

var calculateSquare: (Int) -> Int = { (value) in
	return value * value
}

print(calculateSquare(5)) //25
//Kısaltma 1
var calculateSquare: (Int) -> Int = { return $0 * $0 }

print(calculateSquare(5)) //25
//Kısaltma 2
var calculateSquare: (Int) -> Int = { $0 * $0 }

print(calculateSquare(5)) //25
//Kısaltma 3
//Typealias ile kullanımı

typealias OperateType = (Int) -> Int

var calculateSquare: OperateType = { $0 * $0 }

print(calculateSquare(5)) //25

Yukarıdakı örneklerde temel yapı gösterilmiştir. Farklı kullanımlarıda mevcuttur. Belki onun da örneklerini farklı bir yazıda paylaşırım.