Swiftx is a Swift library containing functional abstractions and extensions to the Swift Standard Library. Swiftx is a smaller and simpler way to introduce pure functional datatypes into any codebase.
For a more full-featured library checkout Swiftz.
Swiftx can be included one of two ways:
Framework
- Drag
Swiftx.xcodeproj
orSwiftx-iOS.xcodeproj
into your project tree as a subproject - Under your project's Build Phases, expand Target Dependencies
- Click the + and add Swiftx
- Expand the Link Binary With Libraries phase
- Click the + and add Swiftx
- Click the + at the top left corner to add a Copy Files build phase
- Set the directory to
Frameworks
- Click the + and add Swiftx
Standalone
- Copy the swift files under
Swiftx/Swiftx
into your project.
Swiftx provides a number of common data types and abstractions any codebase can utilize.
A small example:
import Swiftx
let str : String? = .Some("Hello ")
let greeting = (+"World") <^> str // .Some("Hello World")
Seamless interaction with existing platform libraries is also possible with minimal effort:
import Foundation
import struct Swiftx.Result
/// result now contains either an array of file paths or the error generated by `NSFileManager`.
let result : Result<[String]> = from({ ep in
let documentsDirectory : String = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String)
return (NSFileManager.defaultManager().contentsOfDirectoryAtPath(documentsDirectory, error: ep) as [String]?) ?? []
})
Swiftx can even help with expressions of nothingness or errors:
import Swiftx
/// We may not be able to do what we said we'd do, but this definition compiles. At runtime,
/// any code that invokes this function will immediately halt the program.
func provePEqualsNP() -> Proof<P, NP> {
return undefined()
}
Swiftx supports OS X 10.9+ and iOS 8.0+.
Swiftx is released under the BSD license.