Last active
February 14, 2017 00:53
-
-
Save maximveksler/2d5b1ee071503a187dc12a12a18e80fc to your computer and use it in GitHub Desktop.
Functional Swift - Examples used in https://gumroad.com/l/natural-swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
let fibonacciNumbers = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] | |
let evenFibonacci = fibonacciNumbers.filter { $0 % 2 == 0 } | |
let names = ["Michael Jackson", "Taylor Swift", "Michael Caine", "Adele Adkinis", "Michael Jordan"] | |
let result = names.filter { $0.hasPrefix("Michael") } | |
let words = ["1989", "Fearless", "Red"] | |
let input = "My favorite album is Fearless" | |
let wordsResult = words.filter { input.contains($0) } | |
// flatMap strips optionality, filter retains it. | |
let nilWords = ["1989", nil, "Fearless", nil, "Red"] | |
let nilWordsResult = nilWords.filter { $0 != nil } | |
type(of: nilWordsResult) // Array<Optional<String>>.Type |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
let numbers = [[1, 2], [3, 4], [5, 6]] | |
let joined = Array(numbers.joined()) | |
let albums = ["Fearless", nil, "Speak Now", nil, "Red"] | |
let result = albums.flatMap { $0 } | |
let mapResult = albums.map { $0 } | |
let flatMapResult = albums.flatMap { $0 } | |
type(of: flatMapResult) // Array<String>.Type | |
let scores = ["100", "90", "Fish", "85"] | |
let flatMapScores = scores.flatMap { Int($0) } | |
let files = (1...10).flatMap { try? String(contentsOfFile: "somefile-\($0).txt") } | |
let view = UIView() | |
let labels = view.subviews.flatMap { $0 as? UILabel } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
func lengthOf(strings: [String]) -> [Int] { | |
return strings.map { $0.characters.count } | |
} | |
let fruits = ["Apple", "Cheery", "Orange", "Pineapple"] | |
let upperFruits = fruits.map { $0.uppercased() } | |
let scores = [100, 80, 85] | |
let formatted = scores.map { "Your score was \($0)" } | |
let passOrFail = scores.map { $0 > 85 ? "Pass" : "Fail" } | |
let position = [50, 60, 40] | |
let averageResults = position.map { 45...55 ~= $0 ? "Within average" : "Outside average" } | |
let numbes: [Double] = [4, 9, 25, 36, 49] | |
let result = numbes.map(sqrt) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
let scores = [100, 90, 95] | |
let sum = scores.reduce(0, +) | |
let result = scores.reduce("") { $0 + String($1) } | |
let names = ["Taylor", "Paul", "Adele"] | |
let count = names.reduce(0) { $0 + $1.characters.count } | |
let longest = names.reduce("") { $1.characters.count > $0.characters.count ? $1 : $0 } | |
let longestMax = names.max { $1.characters.count > $0.characters.count } | |
let numbers = [ | |
[1, 1, 2], | |
[3, 5, 8], | |
[13, 21, 34] | |
] | |
let flattened: [Int] = numbers.reduce([]) { $0 + $1 } | |
let flattened2 = numbers.flatMap { $0 } | |
let flattened3 = Array(numbers.joined()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment