SlideShare a Scribd company logo
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
func ( : ) ->
(( ) -> )
func ( : ) ->
( ) ->
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
func add(_ value1: Int, _ value2: Int) -> Int {
return value1 + value2
}
add(2,3)
func curriedAdd(_ value1: Int) -> ( (Int) -> Int ) {
return { value2 in
return value1 + value2
}
}
func curriedAdd(_ value1: Int) -> ( (Int) -> Int ) {
return { value2 in
return value1 + value2
}
}
let add2 = curriedAdd(2)
add2(3)
func curriedAdd(_ value1: Int) -> ( (Int) -> Int ) {
return { value2 in
return value1 + value2
}
}
let add2 = curriedAdd(2)
add2(3)
curriedAdd(2)(3)
let add2 = curriedAdd(2)
add2(3)
curriedAdd(2)(3)
func curriedAdd(_ value1: Int) -> (Int) -> Int {
return { value2 in
return value1 + value2
}
}
Swift 함수 커링 사용하기
"aaa/bbb/ccc/ddd".components(separatedBy: "/")
"aaa*bbb*ccc*ddd".components(separatedBy: "*")
func stringDevider(_ seperater: String) -> (String) -> [String] {
return { (string: String) -> [String] in
return string.components(separatedBy: seperater)
}
}
let stringDevideBySlash = stringDevider("/")
let stringDevideByAsterisk = stringDevider("*")
stringDevideBySlash("aaa/bbb/ccc/ddd")
stringDevideByAsterisk("aaa*bbb*ccc*ddd")
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
class SomeClass {
func someFunction() {
}
}
class SomeClass {
func someFunction() {
}
}
let someinstance = SomeClass()
someinstance.someFunction()
class SomeClass {
func someFunction() {
}
}
let someinstance = SomeClass()
someinstance.someFunction()
class SomeClass {
func someFunction() {
}
}
let someinstance = SomeClass()
someinstance.someFunction()
class SomeClass {
func someFunction() {
}
}
let someinstance = SomeClass()
someinstance.someFunction()
class SomeClass {
func someFunction() {
}
}
let someinstance = SomeClass()
someinstance.someFunction()
SomeClass.someFunction(someinstance)()
class SomeClass {
func someFunction() {
}
}
let someinstance = SomeClass()
someinstance.someFunction()
SomeClass.someFunction(someinstance)()
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
func regexTest(pattern: String) -> (String) -> Bool
{
let expression: NSRegularExpression? =
try? NSRegularExpression(pattern: pattern,
options: .caseInsensitive)
return { (input: String) -> Bool in
guard let expression = expression else { return false }
let inputRange = NSMakeRange(0, input.characters.count)
let matches = expression.matches(in: input,
options: [],
range: inputRange)
return matches.count > 0
}
}
func regexTest(pattern: String) -> (String) -> Bool
{
let expression: NSRegularExpression? =
try? NSRegularExpression(pattern: pattern,
options: .caseInsensitive)
return { (input: String) -> Bool in
guard let expression = expression else { return false }
let inputRange = NSMakeRange(0, input.characters.count)
let matches = expression.matches(in: input,
options: [],
range: inputRange)
return matches.count > 0
}
}
func regexTest(pattern: String) -> (String) -> Bool
regexTest(pattern: "main")("int main()")
{
let expression: NSRegularExpression? =
try? NSRegularExpression(pattern: pattern,
options: .caseInsensitive)
return { (input: String) -> Bool in
guard let expression = expression else { return false }
let inputRange = NSMakeRange(0, input.characters.count)
let matches = expression.matches(in: input,
options: [],
range: inputRange)
return matches.count > 0
}
}
func regexTest(pattern: String) -> (String) -> Bool
regexTest(pattern: "main")("int main()")
let hasMainIn = regexTest(pattern: "main")
hasMainIn("int main()")
Swift 함수 커링 사용하기
class Regex {
var internalExpression: NSRegularExpression?
init(_ pattern: String) {
self.internalExpression =
try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
}
func test(_ input: String) -> Bool {
let inputRange = NSMakeRange(0, input.characters.count)
guard let matchesCount = self.internalExpression?
.matches(in: input, options: [], range:inputRange)
.count else { return false }
return matchesCount > 0
}
}
class Regex {
var internalExpression: NSRegularExpression?
init(_ pattern: String) {
self.internalExpression =
try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
}
func test(_ input: String) -> Bool {
let inputRange = NSMakeRange(0, input.characters.count)
guard let matchesCount = self.internalExpression?
.matches(in: input, options: [], range:inputRange)
.count else { return false }
return matchesCount > 0
}
}
let regex = Regex("main")
regex.test("int main()")
Regex("main").test("int main()")
class Regex {
var internalExpression: NSRegularExpression?
init(_ pattern: String) {
self.internalExpression =
try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
}
func test(_ input: String) -> Bool {
let inputRange = NSMakeRange(0, input.characters.count)
guard let matchesCount = self.internalExpression?
.matches(in: input, options: [], range:inputRange)
.count else { return false }
return matchesCount > 0
}
}
let regex = Regex("main")
regex.test("int main()")
Regex("main").test("int main()")
let hasMainIn = Regex("main").test
hasMainIn("int main()")
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
struct Friend {
var name: String
var id: Int
}
struct Friend {
var name: String
var id: Int
}
let friends = [Friend(name:" ", id: 1),
Friend(name:" ", id: 2),
Friend(name:" ", id: 3),
Friend(name:" ", id: 4),
Friend(name:" ", id: 5)]
struct Friend {
var name: String
var id: Int
}
let friends = [Friend(name:" ", id: 1),
Friend(name:" ", id: 2),
Friend(name:" ", id: 3),
Friend(name:" ", id: 4),
Friend(name:" ", id: 5)]
func inviteFriend(ID: Int) -> Void
let actionsheet = UIAlertController(title: " ", message: " ",
preferredStyle: .actionSheet)
let actionsheet = UIAlertController(title: " ", message: " ",
preferredStyle: .actionSheet)
UIAlertAction(title: String?, style: UIAlertActionStyle, handler:
((UIAlertAction) -> Void)?)
func actionHandler(friendID: Int) -> (UIAlertAction) -> () {
return { [weak self] action -> Void in
self?.inviteFriend(ID: friendID)
}
}
friends.forEach{ (friend: Friend) in
actionsheet.addAction(UIAlertAction(title: friend.name,
style: UIAlertActionStyle.default,
handler: actionHandler(friendID:
friend.id)))
}
actionsheet.addAction(UIAlertAction(title: " ", style: .cancel, handler: nil))
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
class ViewController: UIViewController {
@IBOutlet var yellowBox: UIView!
}
class ViewController: UIViewController {
@IBOutlet var yellowBox: UIView!
}
extension ViewController {
@IBAction func leftButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5, animations: {
var frame = self.yellowBox.frame
frame.origin.x = frame.origin.x - 100
self.yellowBox.frame = frame
}, completion: nil)
}
@IBAction func rightButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5, animations: {
var frame = self.yellowBox.frame
frame.origin.x = frame.origin.x + 100
self.yellowBox.frame = frame
}, completion: nil)
}
@IBAction func upButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5, animations: {
var frame = self.yellowBox.frame
frame.origin.y = frame.origin.y - 100
extension ViewController {
@IBAction func leftButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5, animations: {
var frame = self.yellowBox.frame
frame.origin.x = frame.origin.x - 100
self.yellowBox.frame = frame
}, completion: nil)
}
@IBAction func rightButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5, animations: {
var frame = self.yellowBox.frame
frame.origin.x = frame.origin.x + 100
self.yellowBox.frame = frame
}, completion: nil)
}
@IBAction func upButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5, animations: {
var frame = self.yellowBox.frame
frame.origin.y = frame.origin.y - 100
self.yellowBox.frame = frame
}, completion: nil)
}
@IBAction func downButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5, animations: {
var frame = self.yellowBox.frame
frame.origin.y = frame.origin.y + 100
self.yellowBox.frame = frame
}, completion: nil)
}
}
enum AnimationDirection {
case up
case down
case left
case right
}
extension ViewController {
func moveBox(to: AnimationDirection) -> () -> Void {
return {
var frame = self.yellowBox.frame
switch to {
case .left:
frame.origin.x = frame.origin.x - 100
case .right:
frame.origin.x = frame.origin.x + 100
case .down:
frame.origin.y = frame.origin.y + 100
case .up:
frame.origin.y = frame.origin.y - 100
}
self.yellowBox.frame = frame
}
}
@IBAction func leftButtonTapped(_ sender: Any) {
frame.origin.x = frame.origin.x + 100
case .down:
frame.origin.y = frame.origin.y + 100
case .up:
frame.origin.y = frame.origin.y - 100
}
self.yellowBox.frame = frame
}
}
@IBAction func leftButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5,
animations: moveBox(to: .left),
completion: nil)
}
@IBAction func rightButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5,
animations: moveBox(to: .right),
completion: nil)
}
@IBAction func upButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5,
animations: moveBox(to: .up),
completion: nil)
}
@IBAction func downButtonTapped(_ sender: Any) {
UIView.animate(withDuration: 0.5,
animations: moveBox(to: .down),
completion: nil)
}
}
Swift 함수 커링 사용하기
viewController.api = { (pageID: Int) -> Observable<[Post]> in
// alamofire api Observable Return
}
viewController.api = { (pageID: Int) -> Observable<[Post]> in
// alamofire api Observable Return
}
func searchAPI(searchText: String) -> (Int) -> Observable<[Post]>
self.api = searchAPI(searchText: "search keywords")
func curry<A, B, C>(f: @escaping (A, B) -> C) -> ((A) -> ((B) -> C)) {
return { x in { y in f(x, y) }}
}
func fiveTimeCurry<A, B, C, D, E>(_ a: A) -> (B) -> (C) -> (D) -> E {
}
Swift 함수 커링 사용하기
g(f(x))
g(f(x))
let result = bind(add2, 3) // result => 5
g(f(x))
let result = bind(add2, 3) // result => 5
infix operator >>=: MultiplicationPrecedence
func >>=<A, B>(a: A, f: (A) -> B) -> B
?

More Related Content

What's hot (20)

PPTX
Php & my sql
Norhisyam Dasuki
 
PDF
Implementing virtual machines in go & c 2018 redux
Eleanor McHugh
 
PDF
Introduction to Swift programming language.
Icalia Labs
 
PPTX
Type Driven Development with TypeScript
Garth Gilmour
 
PPT
Developing iOS apps with Swift
New Generation Applications
 
PDF
Swift Programming Language
Giuseppe Arici
 
PDF
Swift Rocks #2: Going functional
Hackraft
 
PPT
Synapse india complain sharing info about php chaptr 26
SynapseindiaComplaints
 
PDF
Swift rocks! #1
Hackraft
 
PDF
Funcitonal Swift Conference: The Functional Way
Natasha Murashev
 
PDF
Programming Language Swift Overview
Kaz Yoshikawa
 
PDF
Functional Algebra: Monoids Applied
Susan Potter
 
PDF
Being functional in PHP (DPC 2016)
David de Boer
 
PDF
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
Fwdays
 
PDF
ECMAScript 6
Piotr Lewandowski
 
PPTX
PHP Functions & Arrays
Henry Osborne
 
PDF
Is Haskell an acceptable Perl?
osfameron
 
PDF
PHP Language Trivia
Nikita Popov
 
PPTX
A Few Interesting Things in Apple's Swift Programming Language
SmartLogic
 
ODP
EcmaScript 6
Manoj Kumar
 
Php & my sql
Norhisyam Dasuki
 
Implementing virtual machines in go & c 2018 redux
Eleanor McHugh
 
Introduction to Swift programming language.
Icalia Labs
 
Type Driven Development with TypeScript
Garth Gilmour
 
Developing iOS apps with Swift
New Generation Applications
 
Swift Programming Language
Giuseppe Arici
 
Swift Rocks #2: Going functional
Hackraft
 
Synapse india complain sharing info about php chaptr 26
SynapseindiaComplaints
 
Swift rocks! #1
Hackraft
 
Funcitonal Swift Conference: The Functional Way
Natasha Murashev
 
Programming Language Swift Overview
Kaz Yoshikawa
 
Functional Algebra: Monoids Applied
Susan Potter
 
Being functional in PHP (DPC 2016)
David de Boer
 
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
Fwdays
 
ECMAScript 6
Piotr Lewandowski
 
PHP Functions & Arrays
Henry Osborne
 
Is Haskell an acceptable Perl?
osfameron
 
PHP Language Trivia
Nikita Popov
 
A Few Interesting Things in Apple's Swift Programming Language
SmartLogic
 
EcmaScript 6
Manoj Kumar
 

Similar to Swift 함수 커링 사용하기 (20)

PDF
Swift 5.1 Language Guide Notes.pdf
JkPoppy
 
PDF
20191116 custom operators in swift
Chiwon Song
 
PDF
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
Suyeol Jeon
 
PDF
Swift - One step forward from Obj-C
Nissan Tsafrir
 
PDF
20181020 advanced higher-order function
Chiwon Song
 
PDF
Pooya Khaloo Presentation on IWMC 2015
Iran Entrepreneurship Association
 
PDF
20180721 code defragment
Chiwon Song
 
PDF
Real World Generics In Swift
Vadym Markov
 
PDF
Implementing pseudo-keywords through Functional Programing
Vincent Pradeilles
 
PDF
Minimizing Decision Fatigue to Improve Team Productivity
Derek Lee
 
PDF
20180310 functional programming
Chiwon Song
 
PDF
Quick swift tour
Kazunobu Tasaka
 
PDF
An introduction to functional programming with Swift
Fatih Nayebi, Ph.D.
 
PDF
스위프트를 여행하는 히치하이커를 위한 스타일 안내
Jung Kim
 
PDF
Code Review 001
linghuazhang
 
PDF
From android/java to swift (3)
allanh0526
 
PPTX
Swift - Modern & Expressive, or Magical Unicorn?
Mike Jones
 
PDF
Introduction to Swift 2
Joris Timmerman
 
PDF
Swift - the future of iOS app development
openak
 
PDF
Deep Dive Into Swift
Sarath C
 
Swift 5.1 Language Guide Notes.pdf
JkPoppy
 
20191116 custom operators in swift
Chiwon Song
 
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
Suyeol Jeon
 
Swift - One step forward from Obj-C
Nissan Tsafrir
 
20181020 advanced higher-order function
Chiwon Song
 
Pooya Khaloo Presentation on IWMC 2015
Iran Entrepreneurship Association
 
20180721 code defragment
Chiwon Song
 
Real World Generics In Swift
Vadym Markov
 
Implementing pseudo-keywords through Functional Programing
Vincent Pradeilles
 
Minimizing Decision Fatigue to Improve Team Productivity
Derek Lee
 
20180310 functional programming
Chiwon Song
 
Quick swift tour
Kazunobu Tasaka
 
An introduction to functional programming with Swift
Fatih Nayebi, Ph.D.
 
스위프트를 여행하는 히치하이커를 위한 스타일 안내
Jung Kim
 
Code Review 001
linghuazhang
 
From android/java to swift (3)
allanh0526
 
Swift - Modern & Expressive, or Magical Unicorn?
Mike Jones
 
Introduction to Swift 2
Joris Timmerman
 
Swift - the future of iOS app development
openak
 
Deep Dive Into Swift
Sarath C
 
Ad

Recently uploaded (20)

PDF
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PPTX
iaas vs paas vs saas :choosing your cloud strategy
CloudlayaTechnology
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PDF
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
PDF
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
PDF
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PPTX
Coefficient of Variance in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Add Background Images to Charts in IBM SPSS Statistics Version 31.pdf
Version 1 Analytics
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
ERP Consulting Services and Solutions by Contetra Pvt Ltd
jayjani123
 
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
iaas vs paas vs saas :choosing your cloud strategy
CloudlayaTechnology
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
Coefficient of Variance in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Add Background Images to Charts in IBM SPSS Statistics Version 31.pdf
Version 1 Analytics
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
ERP Consulting Services and Solutions by Contetra Pvt Ltd
jayjani123
 
Ad

Swift 함수 커링 사용하기

  • 12. func ( : ) -> (( ) -> )
  • 13. func ( : ) -> ( ) ->
  • 18. func add(_ value1: Int, _ value2: Int) -> Int { return value1 + value2 } add(2,3)
  • 19. func curriedAdd(_ value1: Int) -> ( (Int) -> Int ) { return { value2 in return value1 + value2 } }
  • 20. func curriedAdd(_ value1: Int) -> ( (Int) -> Int ) { return { value2 in return value1 + value2 } } let add2 = curriedAdd(2) add2(3)
  • 21. func curriedAdd(_ value1: Int) -> ( (Int) -> Int ) { return { value2 in return value1 + value2 } } let add2 = curriedAdd(2) add2(3) curriedAdd(2)(3)
  • 22. let add2 = curriedAdd(2) add2(3) curriedAdd(2)(3) func curriedAdd(_ value1: Int) -> (Int) -> Int { return { value2 in return value1 + value2 } }
  • 25. func stringDevider(_ seperater: String) -> (String) -> [String] { return { (string: String) -> [String] in return string.components(separatedBy: seperater) } } let stringDevideBySlash = stringDevider("/") let stringDevideByAsterisk = stringDevider("*") stringDevideBySlash("aaa/bbb/ccc/ddd") stringDevideByAsterisk("aaa*bbb*ccc*ddd")
  • 28. class SomeClass { func someFunction() { } }
  • 29. class SomeClass { func someFunction() { } } let someinstance = SomeClass() someinstance.someFunction()
  • 30. class SomeClass { func someFunction() { } } let someinstance = SomeClass() someinstance.someFunction()
  • 31. class SomeClass { func someFunction() { } } let someinstance = SomeClass() someinstance.someFunction()
  • 32. class SomeClass { func someFunction() { } } let someinstance = SomeClass() someinstance.someFunction()
  • 33. class SomeClass { func someFunction() { } } let someinstance = SomeClass() someinstance.someFunction() SomeClass.someFunction(someinstance)()
  • 34. class SomeClass { func someFunction() { } } let someinstance = SomeClass() someinstance.someFunction() SomeClass.someFunction(someinstance)()
  • 40. func regexTest(pattern: String) -> (String) -> Bool
  • 41. { let expression: NSRegularExpression? = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) return { (input: String) -> Bool in guard let expression = expression else { return false } let inputRange = NSMakeRange(0, input.characters.count) let matches = expression.matches(in: input, options: [], range: inputRange) return matches.count > 0 } } func regexTest(pattern: String) -> (String) -> Bool
  • 42. { let expression: NSRegularExpression? = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) return { (input: String) -> Bool in guard let expression = expression else { return false } let inputRange = NSMakeRange(0, input.characters.count) let matches = expression.matches(in: input, options: [], range: inputRange) return matches.count > 0 } } func regexTest(pattern: String) -> (String) -> Bool regexTest(pattern: "main")("int main()")
  • 43. { let expression: NSRegularExpression? = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) return { (input: String) -> Bool in guard let expression = expression else { return false } let inputRange = NSMakeRange(0, input.characters.count) let matches = expression.matches(in: input, options: [], range: inputRange) return matches.count > 0 } } func regexTest(pattern: String) -> (String) -> Bool regexTest(pattern: "main")("int main()") let hasMainIn = regexTest(pattern: "main") hasMainIn("int main()")
  • 45. class Regex { var internalExpression: NSRegularExpression? init(_ pattern: String) { self.internalExpression = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) } func test(_ input: String) -> Bool { let inputRange = NSMakeRange(0, input.characters.count) guard let matchesCount = self.internalExpression? .matches(in: input, options: [], range:inputRange) .count else { return false } return matchesCount > 0 } }
  • 46. class Regex { var internalExpression: NSRegularExpression? init(_ pattern: String) { self.internalExpression = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) } func test(_ input: String) -> Bool { let inputRange = NSMakeRange(0, input.characters.count) guard let matchesCount = self.internalExpression? .matches(in: input, options: [], range:inputRange) .count else { return false } return matchesCount > 0 } } let regex = Regex("main") regex.test("int main()") Regex("main").test("int main()")
  • 47. class Regex { var internalExpression: NSRegularExpression? init(_ pattern: String) { self.internalExpression = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) } func test(_ input: String) -> Bool { let inputRange = NSMakeRange(0, input.characters.count) guard let matchesCount = self.internalExpression? .matches(in: input, options: [], range:inputRange) .count else { return false } return matchesCount > 0 } } let regex = Regex("main") regex.test("int main()") Regex("main").test("int main()") let hasMainIn = Regex("main").test hasMainIn("int main()")
  • 53. struct Friend { var name: String var id: Int }
  • 54. struct Friend { var name: String var id: Int } let friends = [Friend(name:" ", id: 1), Friend(name:" ", id: 2), Friend(name:" ", id: 3), Friend(name:" ", id: 4), Friend(name:" ", id: 5)]
  • 55. struct Friend { var name: String var id: Int } let friends = [Friend(name:" ", id: 1), Friend(name:" ", id: 2), Friend(name:" ", id: 3), Friend(name:" ", id: 4), Friend(name:" ", id: 5)] func inviteFriend(ID: Int) -> Void
  • 56. let actionsheet = UIAlertController(title: " ", message: " ", preferredStyle: .actionSheet)
  • 57. let actionsheet = UIAlertController(title: " ", message: " ", preferredStyle: .actionSheet) UIAlertAction(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) -> Void)?)
  • 58. func actionHandler(friendID: Int) -> (UIAlertAction) -> () { return { [weak self] action -> Void in self?.inviteFriend(ID: friendID) } } friends.forEach{ (friend: Friend) in actionsheet.addAction(UIAlertAction(title: friend.name, style: UIAlertActionStyle.default, handler: actionHandler(friendID: friend.id))) } actionsheet.addAction(UIAlertAction(title: " ", style: .cancel, handler: nil))
  • 67. class ViewController: UIViewController { @IBOutlet var yellowBox: UIView! }
  • 68. class ViewController: UIViewController { @IBOutlet var yellowBox: UIView! } extension ViewController { @IBAction func leftButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: { var frame = self.yellowBox.frame frame.origin.x = frame.origin.x - 100 self.yellowBox.frame = frame }, completion: nil) } @IBAction func rightButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: { var frame = self.yellowBox.frame frame.origin.x = frame.origin.x + 100 self.yellowBox.frame = frame }, completion: nil) } @IBAction func upButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: { var frame = self.yellowBox.frame frame.origin.y = frame.origin.y - 100
  • 69. extension ViewController { @IBAction func leftButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: { var frame = self.yellowBox.frame frame.origin.x = frame.origin.x - 100 self.yellowBox.frame = frame }, completion: nil) } @IBAction func rightButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: { var frame = self.yellowBox.frame frame.origin.x = frame.origin.x + 100 self.yellowBox.frame = frame }, completion: nil) } @IBAction func upButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: { var frame = self.yellowBox.frame frame.origin.y = frame.origin.y - 100 self.yellowBox.frame = frame }, completion: nil) } @IBAction func downButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: { var frame = self.yellowBox.frame frame.origin.y = frame.origin.y + 100 self.yellowBox.frame = frame }, completion: nil) } }
  • 70. enum AnimationDirection { case up case down case left case right } extension ViewController { func moveBox(to: AnimationDirection) -> () -> Void { return { var frame = self.yellowBox.frame switch to { case .left: frame.origin.x = frame.origin.x - 100 case .right: frame.origin.x = frame.origin.x + 100 case .down: frame.origin.y = frame.origin.y + 100 case .up: frame.origin.y = frame.origin.y - 100 } self.yellowBox.frame = frame } } @IBAction func leftButtonTapped(_ sender: Any) {
  • 71. frame.origin.x = frame.origin.x + 100 case .down: frame.origin.y = frame.origin.y + 100 case .up: frame.origin.y = frame.origin.y - 100 } self.yellowBox.frame = frame } } @IBAction func leftButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: moveBox(to: .left), completion: nil) } @IBAction func rightButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: moveBox(to: .right), completion: nil) } @IBAction func upButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: moveBox(to: .up), completion: nil) } @IBAction func downButtonTapped(_ sender: Any) { UIView.animate(withDuration: 0.5, animations: moveBox(to: .down), completion: nil) } }
  • 73. viewController.api = { (pageID: Int) -> Observable<[Post]> in // alamofire api Observable Return }
  • 74. viewController.api = { (pageID: Int) -> Observable<[Post]> in // alamofire api Observable Return } func searchAPI(searchText: String) -> (Int) -> Observable<[Post]> self.api = searchAPI(searchText: "search keywords")
  • 75. func curry<A, B, C>(f: @escaping (A, B) -> C) -> ((A) -> ((B) -> C)) { return { x in { y in f(x, y) }} } func fiveTimeCurry<A, B, C, D, E>(_ a: A) -> (B) -> (C) -> (D) -> E { }
  • 78. g(f(x)) let result = bind(add2, 3) // result => 5
  • 79. g(f(x)) let result = bind(add2, 3) // result => 5 infix operator >>=: MultiplicationPrecedence func >>=<A, B>(a: A, f: (A) -> B) -> B
  • 80. ?