├── .gitignore
├── .swift-version
├── LICENSE
├── MultiRange
├── Info.plist
├── MultiRange.h
└── MultiRange.swift
├── README.md
├── SwiftyCocoa
├── Dispatch+Extensions.swift
├── Info.plist
├── NSAttributedString+Extensions.swift
├── NSLayoutConstraint+Extensions.swift
├── NSNotificationCenter+Extensions.swift
├── NSObject+Extensions.swift
├── NSThread+Extensions.swift
├── SwiftyCocoa.h
└── URL+Extensions.swift
├── SwiftyCore
├── BinaryInteger+Extensions.swift
├── CollectionType+Extensions.swift
├── Comparable+Extensions.swift
├── Dictionary+Extensions.swift
├── FloatingPoint+Extensions.swift
├── Info.plist
├── Optional+Extensions.swift
├── OptionalConvertible.swift
├── RangeReplaceableCollectionType+Extensions.swift
├── SequenceType+Extensions.swift
├── SignedNumeric+Extensions.swift
├── SortOrder.swift
├── StringLiteralConvertible+Extensions.swift
├── Swift+Extensions.swift
├── SwiftyCore.h
└── UnsignedInteger+Extensions.swift
├── SwiftyGeometry
├── CGFloatTuple.swift
├── CGGeometry+CGFloatTuple.swift
├── CGPoint+Extensions.swift
├── CGRect+Extensions.swift
├── Info.plist
├── SwiftyGeometry.h
└── UIEdgeInsets+Extensions.swift
├── SwiftySwift.podspec
├── SwiftySwift.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcshareddata
│ ├── IDETemplateMacros.plist
│ └── xcschemes
│ ├── MultiRange.xcscheme
│ ├── SwiftyCocoa.xcscheme
│ ├── SwiftyCore.xcscheme
│ ├── SwiftyGeometry.xcscheme
│ ├── SwiftySwift.xcscheme
│ └── SwiftyUIKit.xcscheme
├── SwiftySwift
├── Info.plist
└── SwiftySwift.h
├── SwiftySwiftTests
├── Info.plist
└── SwiftySwiftTests.swift
└── SwiftyUIKit
├── Info.plist
├── SwiftyUIKit.h
├── UICollectionView+Extensions.swift
├── UIColor+Extensions.swift
├── UIFont+Extensions.swift
├── UIGestureRecognizer+Extensions.swift
├── UIImage+Extensions.swift
├── UIImageView+Extensions.swift
├── UITableView+Extensions.swift
├── UIView+Extensions.swift
└── UIViewController+Extensions.swift
/.gitignore:
--------------------------------------------------------------------------------
1 | SwiftySwift.xcodeproj/xcuserdata
2 | SwiftySwift.xcodeproj/project.xcworkspace/xcuserdata
3 | *.xccheckout
4 | Carthage/Build
5 | DerivedData
6 |
--------------------------------------------------------------------------------
/.swift-version:
--------------------------------------------------------------------------------
1 | 4.0
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2015 Agustín de Cabrera
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a
4 | copy of this software and associated documentation files (the "Software"),
5 | to deal in the Software without restriction, including without limitation
6 | the rights to use, copy, modify, merge, publish, distribute, sublicense,
7 | and/or sell copies of the Software, and to permit persons to whom the
8 | Software is furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19 | IN THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/MultiRange/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/MultiRange/MultiRange.h:
--------------------------------------------------------------------------------
1 | //
2 | // MultiRange.h
3 | // MultiRange
4 | //
5 | // Created by Agustín de Cabrera on 3/9/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | @import UIKit;
10 |
11 | //! Project version number for MultiRange.
12 | FOUNDATION_EXPORT double MultiRangeVersionNumber;
13 |
14 | //! Project version string for MultiRange.
15 | FOUNDATION_EXPORT const unsigned char MultiRangeVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/MultiRange/MultiRange.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MultiRange.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustín de Cabrera on 10/27/15.
6 | // Copyright © 2015 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | /**
10 | Useful methods to iterate over a grid
11 |
12 | These methods return a sequence that can be iterated over, and will provide a
13 | tuple for each combination between the start and end tuples
14 |
15 | e.g.: (1,1)...(2,2) will generate (1,1), (1,2), (2,1), (2,2)
16 | **/
17 |
18 | public func ..< (start: (T, T), end: (T, T)) -> MultiRange {
19 | return MultiRange(
20 | rows: start.0 ..< end.0,
21 | columns: start.1 ..< end.1
22 | )
23 | }
24 |
25 | public func ... (start: (T, T), end: (T, T)) -> MultiRange {
26 | return MultiRange(
27 | rows: CountableRange(start.0 ... end.0),
28 | columns: CountableRange(start.1 ... end.1)
29 | )
30 | }
31 |
32 | public struct MultiRange : Equatable, Sequence, CustomStringConvertible, CustomDebugStringConvertible
33 | where T: Strideable & Comparable, T.Stride: SignedInteger {
34 |
35 | private let rows: CountableRange
36 | private let columns: CountableRange
37 |
38 | init(rows: CountableRange, columns: CountableRange) {
39 | self.rows = rows
40 | self.columns = columns
41 | }
42 |
43 | public func makeIterator() -> AnyIterator<(T, T)> {
44 | return multiRangIterator(rows, columns)
45 | }
46 |
47 | public func contains(_ element: (T, T)) -> Bool {
48 | return contains { $0 == element.0 && $1 == element.1 }
49 | }
50 |
51 | public func underestimateCount() -> Int {
52 | return rows.underestimatedCount * columns.underestimatedCount
53 | }
54 |
55 | public var description: String {
56 | return "(\(rows.lowerBound), \(columns.lowerBound))..<(\(rows.upperBound), \(columns.upperBound))"
57 | }
58 |
59 | public var debugDescription: String {
60 | return "MultiRange(\(description))"
61 | }
62 |
63 | public static func == (lhs: MultiRange, rhs: MultiRange) -> Bool {
64 | return lhs.rows == rhs.rows && lhs.columns == rhs.columns
65 | }
66 | }
67 |
68 | private func multiRangIterator(_ rows: CountableRange, _ columns: CountableRange) -> AnyIterator<(T, T)> {
69 | // lazy generators for each row and column
70 | let lazyPointSequence = rows.lazy.map { r in
71 | columns.lazy.map({ c in (r, c) })
72 | }
73 | let columnIterators = lazyPointSequence.map { $0.makeIterator() }
74 | var rowIterator = columnIterators.makeIterator()
75 |
76 | var current = rowIterator.next()
77 | return AnyIterator() {
78 | if let next = current?.next() {
79 | return next
80 | } else {
81 | current = rowIterator.next()
82 | return current?.next()
83 | }
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Purpose
2 | --------------
3 |
4 | SwiftySwift is a collection of useful extensions for Swift types and Cocoa objects.
5 |
--------------------------------------------------------------------------------
/SwiftyCocoa/Dispatch+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Dispatch+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension DispatchQueue {
12 | public func asyncAfter(delay: TimeInterval,
13 | qos: DispatchQoS = .unspecified,
14 | flags: DispatchWorkItemFlags = [],
15 | execute work: @escaping @convention(block) () -> Void) {
16 | asyncAfter(deadline: .now() + delay, qos: qos, flags: flags, execute: work)
17 | }
18 | }
19 |
20 | // MARK: Identity
21 |
22 | extension DispatchQueue {
23 | /// Returns `true` if the receiver is the queue being executed.
24 | public func isCurrent() -> Bool {
25 | return identity == DispatchQueue.getCurrentIdentity()
26 | }
27 |
28 | private static let identityKey = DispatchSpecificKey()
29 |
30 | private var identity: UnsafeMutableRawPointer {
31 | if let identity = getSpecific(key: DispatchQueue.identityKey) {
32 | return identity
33 | }
34 |
35 | let newIdentity = UnsafeMutableRawPointer(mutating: label)
36 | setSpecific(key: DispatchQueue.identityKey, value: newIdentity)
37 | return newIdentity
38 | }
39 |
40 | private static func getCurrentIdentity() -> UnsafeMutableRawPointer? {
41 | return DispatchQueue.getSpecific(key: DispatchQueue.identityKey)
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/SwiftyCocoa/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/SwiftyCocoa/NSAttributedString+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSAttributedString+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | // MARK: NSAttributedString
12 |
13 | extension NSAttributedString {
14 | public convenience init(attributedString attrStr: NSAttributedString, attributes attrs: [NSAttributedStringKey : Any]?) {
15 | guard let attrs = attrs else {
16 | self.init(attributedString: attrStr)
17 | return
18 | }
19 |
20 | let copy = NSMutableAttributedString(attributedString: attrStr)
21 | copy.addAttributes(attrs)
22 | self.init(attributedString: copy)
23 | }
24 | }
25 |
26 | // MARK: - NSMutableAttributedString
27 |
28 | extension NSMutableAttributedString {
29 | public func addAttribute(_ name: NSAttributedStringKey, value: Any) {
30 | addAttribute(name, value: value, range: NSMakeRange(0, self.length))
31 | }
32 |
33 | public func addAttributes(_ attrs: [NSAttributedStringKey : Any]) {
34 | addAttributes(attrs, range: NSMakeRange(0, self.length))
35 | }
36 | }
37 |
38 | // MARK: - Operators
39 |
40 | public func +(lhs: NSAttributedString, rhs: NSAttributedString) -> NSAttributedString {
41 | let copy = NSMutableAttributedString(attributedString: lhs)
42 | copy.append(rhs)
43 | return NSAttributedString(attributedString: copy)
44 | }
45 |
46 | public func +=(lhs: inout NSAttributedString, rhs: NSAttributedString) {
47 | lhs = lhs + rhs
48 | }
49 |
--------------------------------------------------------------------------------
/SwiftyCocoa/NSLayoutConstraint+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSLayoutConstraint+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | // MARK: - NSLayoutConstraint
12 |
13 | extension NSLayoutConstraint {
14 | public class func constraints(withVisualFormats formats: [String], options opts: NSLayoutFormatOptions, metrics: [String : Any]?, views: [String : Any]) -> [NSLayoutConstraint] {
15 | return formats.flatMap {
16 | NSLayoutConstraint.constraints(withVisualFormat: $0, options: opts, metrics: metrics, views: views)
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/SwiftyCocoa/NSNotificationCenter+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSNotificationCenter+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | // MARK: - NSNotificationCenter
12 |
13 | extension NotificationCenter {
14 | public func addObserver(forName name: NSNotification.Name?, object: Any? = nil, using block: @escaping (Notification) -> Void) -> NSObjectProtocol {
15 | return addObserver(forName: name, object: object, queue: nil, using: block)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/SwiftyCocoa/NSObject+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSObject+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | // MARK: - NSObject
12 |
13 | extension NSObject {
14 | public func perform(_ block: () -> Void) {
15 | block()
16 | }
17 |
18 | public func performAfter(delay: TimeInterval, _ block: @escaping () -> Void) {
19 | DispatchQueue.main.asyncAfter(delay: delay) { [weak self] in
20 | self?.perform(block)
21 | }
22 | }
23 |
24 | public func performInBackground(_ block: @escaping () -> Void) {
25 | DispatchQueue.global(qos: .default).async(execute: block)
26 | }
27 |
28 | public func performInMainThread(_ block: @escaping () -> Void) {
29 | DispatchQueue.main.async(execute: block)
30 | }
31 |
32 | public var className: String {
33 | return type(of: self).className
34 | }
35 | public static var className: String {
36 | return stringFromClass(self)
37 | }
38 |
39 | public func attach(_ object: AnyObject) {
40 | objc_setAssociatedObject(self, Unmanaged.passUnretained(object).toOpaque(), object, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
41 | }
42 | public func detach(_ object: AnyObject) {
43 | objc_setAssociatedObject(self, Unmanaged.passUnretained(object).toOpaque(), nil, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/SwiftyCocoa/NSThread+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSThread+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | // MARK: - NSThread
12 |
13 | extension Thread {
14 | public func objectFromThreadDictionary(_ key:NSCopying, defaultValue: @autoclosure () -> T) -> T {
15 |
16 | if let result = threadDictionary[key] as? T {
17 | return result
18 | } else {
19 | let newObject = defaultValue()
20 | threadDictionary[key] = newObject
21 | return newObject
22 | }
23 | }
24 |
25 | public class func objectFromThreadDictionary(_ key:NSCopying, defaultValue: @autoclosure () -> T) -> T {
26 | return current.objectFromThreadDictionary(key, defaultValue: defaultValue)
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/SwiftyCocoa/SwiftyCocoa.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftyCocoa.h
3 | // SwiftyCocoa
4 | //
5 | // Created by Agustín de Cabrera on 3/9/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | @import UIKit;
10 | @import SwiftyCore;
11 |
12 | //! Project version number for SwiftyCocoa.
13 | FOUNDATION_EXPORT double SwiftyCocoaVersionNumber;
14 |
15 | //! Project version string for SwiftyCocoa.
16 | FOUNDATION_EXPORT const unsigned char SwiftyCocoaVersionString[];
17 |
18 | // In this header, you should import all the public headers of your framework using statements like #import
19 |
20 |
21 |
--------------------------------------------------------------------------------
/SwiftyCocoa/URL+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // URL+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Copyright © 2017 Agustín de Cabrera. All rights reserved.
6 | //
7 |
8 | extension URL {
9 | public var resourceIsReachable: Bool {
10 | do {
11 | return try checkResourceIsReachable()
12 | } catch {
13 | return false
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/SwiftyCore/BinaryInteger+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BinaryInteger+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - BinaryInteger
10 |
11 | extension BinaryInteger {
12 | public var isEven: Bool { return (self % 2) == 0 }
13 | public var isOdd: Bool { return !isEven }
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/SwiftyCore/CollectionType+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionType+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - CollectionType
10 |
11 | extension Collection {
12 | /// Returns a tuple composed of: the first element in the collection, and
13 | /// the collection without the first element.
14 | public func decompose() -> (Iterator.Element, SubSequence)? {
15 | return first.map { ($0, dropFirst()) }
16 | }
17 | }
18 |
19 | extension Collection where Iterator.Element : Equatable {
20 | public func first(equalTo element: Iterator.Element) -> Iterator.Element? {
21 | return first { $0 == element }
22 | }
23 | }
24 |
25 | extension Collection where Index == Int {
26 | public func randomElement() -> Iterator.Element? {
27 | let count = UInt32(self.count)
28 | guard count > 0 else { return nil }
29 |
30 | let idx = Int(arc4random_uniform(count))
31 | return self[idx]
32 | }
33 | }
34 |
35 | extension Collection where Iterator.Element: Numeric {
36 | public func sum() -> Iterator.Element? {
37 | return reduce(+)
38 | }
39 | }
40 |
41 | extension Collection where Index == Int {
42 | /// Returns the element at the given index, or `nil` if the index is out of bounds.
43 | public func at(_ index: Int) -> Iterator.Element? {
44 | return indices.contains(index) ? self[index] : nil
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/SwiftyCore/Comparable+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Comparable+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - Comparable
10 |
11 | extension Comparable {
12 | public func compare(_ other: Self) -> ComparisonResult {
13 | return
14 | self < other ? .orderedAscending :
15 | self == other ? .orderedSame :
16 | .orderedDescending
17 | }
18 | }
19 |
20 | extension Comparable {
21 | public func clamp(min: Self, max: Self) -> Self {
22 | return (self < min) ? min : (self > max) ? max : self
23 | }
24 |
25 | public func clamp(_ range: ClosedRange) -> Self {
26 | return clamp(min: range.lowerBound, max: range.upperBound)
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/SwiftyCore/Dictionary+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Dictionary+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - Dictionary
10 |
11 | extension Dictionary {
12 | public init(elements: S) where S.Element == (Key, Value) {
13 | self = Dictionary(elements, uniquingKeysWith: { (_, new) in new })
14 | }
15 |
16 | /// Update the values stored in the dictionary with the given key-value pairs, or, if a key does not exist, add a new entry.
17 | @discardableResult
18 | public mutating func update(withContentsOf newElements: S) -> [Value]
19 | where S.Element == (Key, Value) {
20 | return newElements.compactMap { (k, v) in
21 | updateValue(v, forKey: k)
22 | }
23 | }
24 |
25 | /// Update the values stored in the dictionary with the given key-value pairs, or, if a key does not exist, add a new entry.
26 | @discardableResult
27 | public mutating func update(withContentsOf newElements: S) -> [Value]
28 | where S.Element == Element {
29 | return newElements.compactMap { (k, v) in
30 | updateValue(v, forKey: k)
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/SwiftyCore/FloatingPoint+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FloatingPoint+Extensions.swift
3 | // SwiftyCore
4 | //
5 | // Copyright © 2017 Agustín de Cabrera. All rights reserved.
6 | //
7 |
8 | // MARK: - FloatingPoint
9 |
10 | extension FloatingPoint {
11 | /// Converts the value from degrees to radians.
12 | public func toRadians() -> Self {
13 | return (self/180) * type(of: self).pi
14 | }
15 |
16 | /// Converts the value from radians to degrees.
17 | public func toDegrees() -> Self {
18 | return (self/type(of: self).pi) * 180
19 | }
20 |
21 | public func ratio(min: Self, max: Self) -> Self {
22 | return (self - min)/(max - min)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/SwiftyCore/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/SwiftyCore/Optional+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Optional+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - Optional
10 |
11 | extension Optional {
12 | /// If `self != nil` executes `f(self!)`.
13 | public func unwrap(_ f: (Wrapped) throws -> ()) rethrows {
14 | if let value = self {
15 | try f(value)
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/SwiftyCore/OptionalConvertible.swift:
--------------------------------------------------------------------------------
1 | //
2 | // OptionalConvertible.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - OptionalConvertible
10 |
11 | /// A type that can be represented as an `Optional`
12 | public protocol OptionalConvertible {
13 | associatedtype SomeValue
14 |
15 | var optionalValue: SomeValue? { get }
16 | }
17 |
18 | extension Optional: OptionalConvertible {
19 | public var optionalValue: Wrapped? { return self }
20 | }
21 |
22 | // MARK: - SequenceType + OptionalConvertible
23 |
24 | extension Sequence where Element : OptionalConvertible {
25 | /// return an `Array` containing the non-nil values in `self`
26 | /// DEPRECATED: use `compact`
27 | @available(*, deprecated)
28 | public func flatMap() -> [Element.SomeValue] {
29 | return removingNilValues()
30 | }
31 |
32 | /// return an `Array` containing the non-nil values in `self`
33 | /// DEPRECATED: use `compact`
34 | @available(*, deprecated)
35 | public func removingNilValues() -> [Element.SomeValue] {
36 | var result: [Element.SomeValue] = []
37 | for element in self {
38 | if let value = element.optionalValue {
39 | result.append(value)
40 | }
41 | }
42 | return result
43 | }
44 |
45 | public func compact() -> [Element.SomeValue] {
46 | return compactMap { $0.optionalValue }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/SwiftyCore/RangeReplaceableCollectionType+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RangeReplaceableCollectionType+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - RangeReplaceableCollectionType
10 |
11 | extension RangeReplaceableCollection {
12 | @discardableResult
13 | mutating public func remove(where predicate: (Iterator.Element) -> Bool) -> Iterator.Element? {
14 | return index(where: predicate).map { remove(at: $0) }
15 | }
16 | }
17 |
18 | extension RangeReplaceableCollection where Iterator.Element : Equatable {
19 | @discardableResult
20 | mutating public func remove(_ element: Iterator.Element) -> Iterator.Element? {
21 | return index(of: element).map { remove(at: $0) }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/SwiftyCore/SequenceType+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SequenceType+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - SequenceType
10 |
11 | extension Sequence where Iterator.Element : Equatable {
12 | /// Return `true` iff all elements of `other` are contained in `self`.
13 | public func contains(_ other: S) -> Bool where S.Element == Element {
14 | return other.all { self.contains($0) }
15 | }
16 |
17 | /// Return an `Array` with the elements of self, with all duplicates removed.
18 | public func filteringDuplicates() -> [Iterator.Element] {
19 | var result: [Iterator.Element] = []
20 | for element in self {
21 | if !result.contains(element) { result.append(element) }
22 | }
23 | return result
24 | }
25 | }
26 |
27 | extension Sequence where Iterator.Element : Hashable {
28 | /// Return `true` iff all elements of `other` are contained in `self`.
29 | public func contains(_ other: S) -> Bool where S.Iterator.Element == Iterator.Element {
30 | let set = Set(self)
31 | return other.all { set.contains($0) }
32 | }
33 |
34 | /// Return an `Array` with the elements of self, with all duplicates removed.
35 | public func filteringDuplicates() -> [Iterator.Element] {
36 | var result = Array()
37 | var set = Set()
38 |
39 | for element in self {
40 | if !set.contains(element) {
41 | result.append(element)
42 | set.insert(element)
43 | }
44 | }
45 | return result
46 | }
47 | }
48 |
49 | extension Sequence {
50 | /// Return `true` if the predicate returns `true` for all elements of `self`
51 | public func all(_ predicate: (Iterator.Element) -> Bool) -> Bool {
52 | for element in self {
53 | guard predicate(element) else { return false }
54 | }
55 | return true
56 | }
57 |
58 | /// Return `true` if the predicate returns `true` for any element in `self`
59 | public func any(_ predicate: (Iterator.Element) -> Bool) -> Bool {
60 | for element in self {
61 | if predicate(element) { return true }
62 | }
63 | return false
64 | }
65 |
66 | /// Return nil is `self` is empty, otherwise return the result of repeatedly
67 | /// calling `combine` with each element of `self`, in turn.
68 | /// i.e. return `combine(combine(...combine(combine(self[0], self[1]),
69 | /// self[2]),...self[count-2]), self[count-1])`.
70 | public func reduce(_ nextPartialResult: (Iterator.Element, Iterator.Element) throws -> Iterator.Element) rethrows -> Iterator.Element? {
71 |
72 | var generator = self.makeIterator()
73 | guard let first = generator.next() else {
74 | return nil
75 | }
76 |
77 | var result = first
78 | while let element = generator.next() {
79 | result = try nextPartialResult(result, element)
80 | }
81 |
82 | return result
83 | }
84 |
85 | /**
86 | Create a dictionary with the results of applying `transform` to the elements
87 | of `self`, using the first tuple component as the key and the second as the value.
88 |
89 | Returning `nil` will generate no entry for that element. Returning an existing
90 | key will overwrite previous entries.
91 | */
92 | public func mapToDictionary(_ transform: (Iterator.Element) -> (Key, Value)?) -> [Key: Value] {
93 | let elements = compactMap(transform)
94 | return Dictionary(elements, uniquingKeysWith: { _, new in new })
95 | }
96 |
97 | /**
98 | Create a dictionary with the results of applying `transform` to the elements
99 | of `self`, using the returned value as the key and the element as the value.
100 |
101 | Returning `nil` will generate no entry for that element. Returning an existing
102 | key will overwrite previous entries.
103 | */
104 | public func mapToDictionary(_ transform: (Iterator.Element) -> Key?) -> [Key: Iterator.Element] {
105 | return mapToDictionary { value in
106 | transform(value).map({ ($0, value) })
107 | }
108 | }
109 |
110 | /**
111 | Create a dictionary of arrays based on the results of applying `transform`
112 | to the elements of `self`. The first tuple component is used as key and the
113 | second is added into an array containing all results that share the same key,
114 | which is used as the value.
115 |
116 | Returning `nil` will generate no entry for that element.
117 | */
118 | public func groupBy(_ transform: (Iterator.Element) -> (Key, Value)?) -> [Key: [Value]] {
119 | let elements = compactMap(transform).map { ($0, [$1]) }
120 | return Dictionary.init(elements, uniquingKeysWith: +)
121 | }
122 |
123 | /**
124 | Create a dictionary of arrays based on the results of applying `transform`
125 | to the elements of `self`. The returned value is used as key and the corresponding
126 | element is added into an array containing all results that share the same key,
127 | which is used as the value.
128 |
129 | Returning `nil` will generate no entry for that element.
130 | */
131 | public func groupBy(_ transform: (Iterator.Element) -> Key?) -> [Key: [Iterator.Element]] {
132 | let elements = compactMap({ value in
133 | transform(value).map({ ($0, [value]) })
134 | })
135 | return Dictionary.init(elements, uniquingKeysWith: +)
136 | }
137 |
138 | /**
139 | Create an array of arrays based on the results of applying `transform`
140 | to the elements of `self`. The first tuple component is used as the key to
141 | group the results, and the second is added into an array containing all results
142 | that share the same key.
143 |
144 | Returning `nil` will generate no entry for that element.
145 | */
146 | public func groupValues(_ transform: (Iterator.Element) -> (Key, Value)?) -> [[Value]] {
147 | let elements = compactMap(transform)
148 | let keys = elements.map { $0.0 }.filteringDuplicates()
149 | return keys.map { key in
150 | elements.filter { $0.0 == key }.map { $0.1 }
151 | }
152 | }
153 |
154 | /**
155 | Create an array of arrays based on the results of applying `transform`
156 | to the elements of `self`.The returned value is used as the key to
157 | group the results, and corresponding element is added into an array containing
158 | all results that share the same key.
159 |
160 | Returning `nil` will generate no entry for that element.
161 | */
162 | public func groupValues(_ transform: (Iterator.Element) -> Key?) -> [[Iterator.Element]] {
163 | return groupValues { value in
164 | transform(value).map({ ($0, value) })
165 | }
166 | }
167 |
168 | /**
169 | Returns a tuple containing, in order, the elements of the sequence divided into two
170 | arrays, with one containing the elements that satisfy the given predicate and the
171 | other the elements that don't.
172 | */
173 | public func groupFilter(_ includeElement: (Self.Iterator.Element) -> Bool) -> (included: [Self.Iterator.Element], excluded: [Self.Iterator.Element]) {
174 | // group included and excluded elements using the result of the block (true/false)
175 | let grouped = self.groupBy {
176 | includeElement($0)
177 | }
178 | return (grouped[true] ?? [], grouped[false] ?? [])
179 | }
180 |
181 | /// Returns the first non-nil value obtained by applying `transform` to the elements of `self`
182 | public func mapFirst(_ transform: (Iterator.Element) -> T?) -> T? {
183 | for value in self {
184 | if let result = transform(value) { return result }
185 | }
186 | return nil
187 | }
188 |
189 | /// Returns the first non-nil value obtained by applying `transform` to the elements of `self` in reverse order
190 | public func mapLast(_ transform: (Iterator.Element) -> T?) -> T? {
191 | for element in self.lazy.reversed() {
192 | if let result = transform(element) { return result }
193 | }
194 | return nil
195 | }
196 |
197 | /// Use the given closures to extract the values for comparison. If the values
198 | /// are equal compare using the next closure in the list until they are all exhausted
199 | public func min(by values: ((Iterator.Element, Iterator.Element) -> ComparisonResult)...) -> Iterator.Element? {
200 | return self.min(by: values)
201 | }
202 |
203 | /// Use the given closures to extract the values for comparison. If the values
204 | /// are equal compare using the next closure in the list until they are all exhausted
205 | public func min(by values: [(Iterator.Element, Iterator.Element) -> ComparisonResult]) -> Iterator.Element? {
206 | guard values.count > 0 else { return nil }
207 | return self.min(by: orderedBefore(values))
208 | }
209 |
210 | /// Use the given closures to extract the values for comparison. If the values
211 | /// are equal compare using the next closure in the list until they are all exhausted
212 | public func max(by values: ((Iterator.Element, Iterator.Element) -> ComparisonResult)...) -> Iterator.Element? {
213 | return self.max(by: values)
214 | }
215 |
216 | /// Use the given closures to extract the values for comparison. If the values
217 | /// are equal compare using the next closure in the list until they are all exhausted
218 | public func max(by values: [(Iterator.Element, Iterator.Element) -> ComparisonResult]) -> Iterator.Element? {
219 | guard values.count > 0 else { return nil }
220 | return self.max(by: orderedBefore(values))
221 | }
222 |
223 | /// Use the given closures to extract the values for comparison. If the values
224 | /// are equal compare using the next closure in the list until they are all exhausted
225 | public func sorted(by values: ((Iterator.Element, Iterator.Element) -> ComparisonResult)...) -> [Iterator.Element] {
226 | return sorted(by: values)
227 | }
228 |
229 | /// Use the given closures to extract the values for comparison. If the values
230 | /// are equal compare using the next closure in the list until they are all exhausted
231 | public func sorted(by values: [(Iterator.Element, Iterator.Element) -> ComparisonResult]) -> [Iterator.Element] {
232 | return sorted(by: orderedBefore(values))
233 | }
234 | }
235 |
236 | /// Merge a list of comparison blocks into a single block used for sorting a sequence.
237 | ///
238 | /// Use the given closures to extract the values for comparison. If the values
239 | /// are equal compare using the next closure in the list until they are all exhausted
240 | private func orderedBefore(_ comparisons: [(T, T) -> ComparisonResult]) -> (T, T) -> Bool {
241 | return { (lhs, rhs) -> Bool in
242 | for compare in comparisons {
243 | let result = compare(lhs, rhs)
244 | if result != .orderedSame {
245 | return result == .orderedAscending
246 | }
247 | }
248 | return true
249 | }
250 | }
251 |
--------------------------------------------------------------------------------
/SwiftyCore/SignedNumeric+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SignedNumeric+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Copyright © 2017 Agustín de Cabrera. All rights reserved.
6 | //
7 |
8 | extension SignedNumeric where Self.Magnitude == Self {
9 | public var sign: Self {
10 | return self == 0 ? 0 : self == abs(self) ? 1 : -1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/SwiftyCore/SortOrder.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SortOrder.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | //MARK: - SortOrder
10 |
11 | /// Determines the possible ways to sort a sequence of Comparable elements
12 | public enum SortOrder {
13 | case ascending
14 | case descending
15 |
16 | /// Return whether the elements are ordered according to their values and
17 | /// the current sort order.
18 | public func isOrderedBefore(_ lhs: T, _ rhs: T) -> Bool {
19 | switch self {
20 | case .ascending: return lhs <= rhs
21 | case .descending: return lhs > rhs
22 | }
23 | }
24 |
25 | /// Return whether the elements are ordered according to their values and
26 | /// the current sort order. Nil values are considered
27 | /// to be ordered after all others.
28 | public func isOrderedBefore(_ lhs: T?, _ rhs: T?) -> Bool {
29 | guard let lhs = lhs else { return false }
30 | guard let rhs = rhs else { return true }
31 |
32 | return isOrderedBefore(lhs, rhs)
33 | }
34 | }
35 |
36 | //MARK: - SequenceType + SortOrder
37 |
38 | extension Sequence {
39 | /// Return an `Array` containing the sorted elements of source according to
40 | /// the values obtained by applying `transform` to each element.
41 | public func sorted(order sortOrder: SortOrder = .ascending, by transform: (Iterator.Element) -> T) -> [Iterator.Element] {
42 | return sorted {
43 | sortOrder.isOrderedBefore(transform($0), transform($1))
44 | }
45 | }
46 |
47 | /// Return an `Array` containing the sorted elements of source according to
48 | /// the values obtained by applying `transform` to each element. Elements
49 | /// that return nil values are placed at the end of the array.
50 | public func sorted(order sortOrder: SortOrder = .ascending, by transform: (Iterator.Element) -> T?) -> [Iterator.Element] {
51 | return sorted {
52 | sortOrder.isOrderedBefore(transform($0), transform($1))
53 | }
54 | }
55 |
56 | /// Returns the minimum element in `self` sorted according to
57 | /// the values obtained by applying `transform` to each element.
58 | public func min(sortOrder: SortOrder = .ascending, by transform: (Self.Iterator.Element) -> T) -> Self.Iterator.Element? {
59 | return self.min {
60 | sortOrder.isOrderedBefore(transform($0), transform($1))
61 | }
62 | }
63 |
64 | /// Returns the maximum element in `self` sorted according to
65 | /// the values obtained by applying `transform` to each element.
66 | public func max(sortOrder: SortOrder = .ascending, by transform: (Self.Iterator.Element) -> T) -> Self.Iterator.Element? {
67 | return self.max {
68 | sortOrder.isOrderedBefore(transform($0), transform($1))
69 | }
70 | }
71 | }
72 |
73 | extension Sequence where Iterator.Element: Comparable {
74 | /// Returns the elements of the sequence, sorted using the given sort order.
75 | public func sorted(order sortOrder: SortOrder) -> [Self.Iterator.Element] {
76 | return sorted { sortOrder.isOrderedBefore($0, $1) }
77 | }
78 | }
79 |
80 |
--------------------------------------------------------------------------------
/SwiftyCore/StringLiteralConvertible+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StringLiteralConvertible+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - StringLiteralConvertible
10 |
11 | extension ExpressibleByStringLiteral where StringLiteralType == ExtendedGraphemeClusterLiteralType {
12 | public init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType) {
13 | self.init(stringLiteral: value)
14 | }
15 | }
16 |
17 | extension ExpressibleByStringLiteral where StringLiteralType == UnicodeScalarLiteralType {
18 | public init(unicodeScalarLiteral value: UnicodeScalarLiteralType) {
19 | self.init(stringLiteral: value)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/SwiftyCore/Swift+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftySwift.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustín de Cabrera on 6/1/15.
6 | // Copyright (c) 2015 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | // MARK: - cast helpers
10 |
11 | /**
12 | The following methods can be used to perform a cast without being explicit
13 | about the class the object is being cast to, relying instead on the type-inferrence
14 | features of the compiler.
15 |
16 | This allows creating class methods that return an instance of the subclass they are called on.
17 |
18 | e.g.
19 |
20 | class A {
21 | class func factoryMethod() -> Self? {
22 | let instance = createNewInstance()
23 | return cast(instance)
24 | }
25 | }
26 |
27 | class B : A {
28 | }
29 |
30 | A.factoryMethod() // type is inferred as A?
31 | B.factoryMethod() // type is inferred as B?
32 | **/
33 |
34 | /// Optional cast of `x` as type `V`
35 | public func cast(_ x: U) -> V? {
36 | return x as? V
37 | }
38 |
39 | /// Return all values of `source` that were successfully casted to type `V`
40 | public func castFilter(_ source: S) -> [V] {
41 | return source.compactMap {
42 | $0 as? V
43 | }
44 | }
45 |
46 | /// Return the first value of `source` that was successfully casted to type `V`
47 | public func castFirst(_ source: S) -> V? {
48 | for e in source {
49 | if let casted = e as? V {
50 | return casted
51 | }
52 | }
53 | return nil
54 | }
55 |
56 | /// Forced cast of `x` as type `V`
57 | public func forcedCast(_ x: U) -> V {
58 | return x as! V
59 | }
60 |
61 | public func stringFromClass(_ aClass: AnyClass) -> String {
62 | return NSStringFromClass(aClass).components(separatedBy: ".").last!
63 | }
64 |
65 | // MARK: - math
66 |
67 | /// Linear interpolation between two values
68 | public func lerp(_ from: T, _ to: T, _ progress: T) -> T {
69 | return from * (T(1) - progress) + to * progress
70 | }
71 |
72 | public func sign(_ x: T) -> T where T == T.Magnitude {
73 | return x.sign
74 | }
75 |
76 | public func sign(_ x: T) -> T {
77 | return x.sign
78 | }
79 |
80 | public func min(_ t: (T, T)) -> T {
81 | return Swift.min(t.0, t.1)
82 | }
83 |
84 | public func max(_ t: (T, T)) -> T {
85 | return Swift.max(t.0, t.1)
86 | }
87 |
88 | public func ratio(_ x: T, min: T, max: T) -> T {
89 | return x.ratio(min: min, max: max)
90 | }
91 |
92 | public func clamp(_ x: T, min: T, max: T) -> T {
93 | return x.clamp(min: min, max: max)
94 | }
95 |
--------------------------------------------------------------------------------
/SwiftyCore/SwiftyCore.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftyCore.h
3 | // SwiftyCore
4 | //
5 | // Created by Agustín de Cabrera on 3/9/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | @import UIKit;
10 |
11 | //! Project version number for SwiftyCore.
12 | FOUNDATION_EXPORT double SwiftyCoreVersionNumber;
13 |
14 | //! Project version string for SwiftyCore.
15 | FOUNDATION_EXPORT const unsigned char SwiftyCoreVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/SwiftyCore/UnsignedInteger+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UnsignedInteger+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Copyright © 2017 Agustín de Cabrera. All rights reserved.
6 | //
7 |
8 | extension UnsignedInteger {
9 | var sign: Self {
10 | return self == 0 ? 0 : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/SwiftyGeometry/CGFloatTuple.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CGFloatTuple.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import CoreGraphics
10 |
11 | // MARK: - CGFloatTuple
12 |
13 | /// Type that can be serialized to a pair of CGFloat values
14 | public typealias CGFloatTuple = (CGFloat, CGFloat)
15 | public protocol CGFloatTupleConvertible {
16 | var tuple: CGFloatTuple { get }
17 | init(tuple: CGFloatTuple)
18 |
19 | // methods with default implementations
20 | init(_ other: T)
21 | }
22 |
23 | extension CGFloatTupleConvertible {
24 | public init(_ other: T) {
25 | self.init(tuple: other.tuple)
26 | }
27 |
28 | public func makeIterator() -> AnyIterator {
29 | return AnyIterator([tuple.0, tuple.1].makeIterator())
30 | }
31 |
32 | public func max() -> CGFloat {
33 | return Swift.max(tuple.0, tuple.1)
34 | }
35 |
36 | public func min() -> CGFloat {
37 | return Swift.min(tuple.0, tuple.1)
38 | }
39 | }
40 |
41 | /// Functional methods used to apply transforms to a pair of floats
42 | extension CGFloatTupleConvertible {
43 | public func map(_ transform: (CGFloat) throws -> CGFloat) rethrows -> Self {
44 | let t = self.tuple
45 | let result = (try transform(t.0),
46 | try transform(t.1))
47 | return Self(tuple: result)
48 | }
49 |
50 | public func merge(_ other: CGFloatTupleConvertible, _ transform: (CGFloat, CGFloat) throws -> CGFloat) rethrows -> Self {
51 | let (t0, t1) = (self.tuple, other.tuple)
52 | let result = (try transform(t0.0, t1.0),
53 | try transform(t0.1, t1.1))
54 | return Self(tuple: result)
55 | }
56 |
57 | public func merge(_ others: [CGFloatTupleConvertible], _ transform: ([CGFloat]) throws -> CGFloat) rethrows -> Self {
58 | let tuples = [self.tuple] + others.map { $0.tuple }
59 | let result = (try transform(tuples.map { $0.0 }),
60 | try transform(tuples.map { $0.1 }))
61 | return Self(tuple: result)
62 | }
63 | }
64 |
65 | /// Operators that can be applied to a pair of CGFloatTupleConvertible objects
66 | /// Each operation will work on an element-by-element basis
67 |
68 | extension CGFloatTupleConvertible {
69 | public static func +(lhs: Self, rhs: T) -> Self {
70 | return lhs.merge(rhs, +)
71 | }
72 | public static func +=(lhs: inout Self, rhs: T) {
73 | lhs = lhs + rhs
74 | }
75 |
76 | public static func -(lhs: Self, rhs: T) -> Self {
77 | return lhs.merge(rhs, -)
78 | }
79 | public static func -=(lhs: inout Self, rhs: T) {
80 | lhs = lhs - rhs
81 | }
82 |
83 | public static func - (lhs: Self, rhs: CGFloat) -> Self {
84 | return lhs.map({ $0 - rhs })
85 | }
86 | public static func -= (lhs: inout Self, rhs: CGFloat) {
87 | lhs = lhs - rhs
88 | }
89 |
90 | public static func *(lhs: Self, rhs: CGFloat) -> Self {
91 | return lhs.map { $0 * rhs }
92 | }
93 | public static func *=(lhs: inout Self, rhs: CGFloat) {
94 | lhs = lhs * rhs
95 | }
96 |
97 | public static func /(lhs: Self, rhs: CGFloat) -> Self {
98 | return lhs.map { $0 / rhs }
99 | }
100 | public static func /=(lhs: inout Self, rhs: CGFloat) {
101 | lhs = lhs / rhs
102 | }
103 |
104 | public static func *(lhs: Self, rhs: T) -> Self {
105 | return lhs.merge(rhs, *)
106 | }
107 | public static func *=(lhs: inout Self, rhs: T) {
108 | lhs = lhs * rhs
109 | }
110 |
111 | public static func /(lhs: Self, rhs: T) -> Self {
112 | return lhs.merge(rhs, /)
113 | }
114 | public static func /=(lhs: inout Self, rhs: T) {
115 | lhs = lhs / rhs
116 | }
117 |
118 | public static prefix func -(rhs: Self) -> Self {
119 | return rhs.map { -$0 }
120 | }
121 | }
122 |
123 | public func abs(_ x: T) -> T {
124 | return x.map { abs($0) }
125 | }
126 |
127 | public func clamp(_ x: T, min: CGFloatTupleConvertible, max: CGFloatTupleConvertible) -> T {
128 | return x.merge([min, max]) {
129 | clamp($0[0], min: $0[1], max: $0[2])
130 | }
131 | }
132 |
133 | @available(*, deprecated)
134 | public func clamp(_ x: T, _ min: CGFloatTupleConvertible, _ max: CGFloatTupleConvertible) -> T {
135 | return clamp(x, min: min, max: max)
136 | }
137 |
138 | extension CGRect {
139 | /// Multiply the rect's origin and size by the given value
140 | public static func * (lhs: CGRect, rhs: U) -> CGRect {
141 | return CGRect(origin: lhs.origin * rhs, size: lhs.size * rhs)
142 | }
143 | /// Multiply the rect's origin and size by the given value
144 | public static func *= (lhs: inout CGRect, rhs: U) {
145 | lhs = lhs * rhs
146 | }
147 | }
148 |
149 |
--------------------------------------------------------------------------------
/SwiftyGeometry/CGGeometry+CGFloatTuple.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CGGeometry+CGFloatTuple.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import CoreGraphics
10 |
11 | /// CGPoint, CGVector and CGSize can be converted to a pair of floats.
12 | /// Conforming to CGFloatTupleConvertible allows using the operators defined above.
13 |
14 | extension CGPoint: CGFloatTupleConvertible {
15 | public var tuple: CGFloatTuple { return (x, y) }
16 |
17 | public init(tuple: CGFloatTuple) {
18 | self.init(x: tuple.0, y: tuple.1)
19 | }
20 | }
21 |
22 | extension CGSize: CGFloatTupleConvertible {
23 | public var tuple: CGFloatTuple { return (width, height) }
24 |
25 | public init(tuple: CGFloatTuple) {
26 | self.init(width: tuple.0, height: tuple.1)
27 | }
28 | }
29 |
30 | extension CGVector: CGFloatTupleConvertible {
31 | public var tuple: CGFloatTuple { return (dx, dy) }
32 |
33 | public init(tuple: CGFloatTuple) {
34 | self.init(dx: tuple.0, dy: tuple.1)
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/SwiftyGeometry/CGPoint+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CGPoint+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import CoreGraphics
10 |
11 | // MARK: - CGPoint
12 |
13 | extension CGPoint {
14 | public func clamped(to rect: CGRect) -> CGPoint {
15 | return CGPoint(
16 | x: clamp(x, min: rect.minX, max: rect.maxX),
17 | y: clamp(y, min: rect.minY, max: rect.maxY)
18 | )
19 | }
20 |
21 | public var length: CGFloat {
22 | return sqrt((x * x) + (y * y))
23 | }
24 |
25 | public func distance(to point: CGPoint) -> CGFloat {
26 | return sqrt(distanceSquared(to: point))
27 | }
28 |
29 | public func distanceSquared(to point: CGPoint) -> CGFloat {
30 | return ((x - point.x) * (x - point.x)) +
31 | ((y - point.y) * (y - point.y))
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/SwiftyGeometry/CGRect+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CGRect+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import CoreGraphics
10 |
11 | // MARK: - CGRect
12 |
13 | extension CGRect {
14 | public init(_ values: (CGFloat, CGFloat, CGFloat, CGFloat)) {
15 | self.init(x: values.0, y: values.1, width: values.2, height: values.3)
16 | }
17 |
18 | public func clamped(to rect: CGRect) -> CGRect {
19 | if size.width > rect.size.width || size.height > rect.size.height {
20 | return CGRect.null
21 | }
22 |
23 | let newRect = CGRect(origin: rect.origin, size: rect.size - size)
24 | let newOrigin = origin.clamped(to: newRect)
25 |
26 | return CGRect(origin: newOrigin, size: size)
27 | }
28 |
29 | public init(origin: CGPoint, width: CGFloat, height: CGFloat) {
30 | self.init(x: origin.x, y: origin.y, width: width, height: height)
31 | }
32 |
33 | public init(x: CGFloat, y: CGFloat, size: CGSize) {
34 | self.init(x: x, y: y, width: size.width, height: size.height)
35 | }
36 |
37 | public var center: CGPoint {
38 | return CGPoint(x: midX, y: midY)
39 | }
40 |
41 | /// Add the given point to the rect's origin
42 | public static func + (lhs: CGRect, rhs: CGPoint) -> CGRect {
43 | return CGRect(origin: lhs.origin + rhs, size: lhs.size)
44 | }
45 | /// Add the given vector to the rect's origin
46 | public static func + (lhs: CGRect, rhs: CGVector) -> CGRect {
47 | return lhs + CGPoint(rhs)
48 | }
49 | /// Add the given size to the rect's size
50 | public static func + (lhs: CGRect, rhs: CGSize) -> CGRect {
51 | return CGRect(origin: lhs.origin, size: lhs.size + rhs)
52 | }
53 |
54 | /// Substract the given point to the rect's origin
55 | public static func - (lhs: CGRect, rhs: CGPoint) -> CGRect {
56 | return CGRect(origin: lhs.origin - rhs, size: lhs.size)
57 | }
58 | /// Substract the given vector to the rect's origin
59 | public static func - (lhs: CGRect, rhs: CGVector) -> CGRect {
60 | return lhs - CGPoint(rhs)
61 | }
62 | /// Substract the given size to the rect's size
63 | public static func - (lhs: CGRect, rhs: CGSize) -> CGRect {
64 | return CGRect(origin: lhs.origin, size: lhs.size - rhs)
65 | }
66 |
67 | /// Multiply the rect's origin and size by the given value
68 | public static func * (lhs: CGRect, rhs: CGFloat) -> CGRect {
69 | return CGRect(origin: lhs.origin * rhs, size: lhs.size * rhs)
70 | }
71 | /// Multiply the rect's origin and size by the given value
72 | public static func *= (lhs: inout CGRect, rhs: CGFloat) {
73 | lhs = lhs * rhs
74 | }
75 | }
76 |
77 | /// Interpolate between two rects
78 | public func lerp(_ from: CGRect, _ to: CGRect, _ progress: Double) -> CGRect {
79 | let progress = CGFloat(progress)
80 | return CGRect(
81 | x: lerp(from.origin.x, to.origin.x, progress),
82 | y: lerp(from.origin.y, to.origin.y, progress),
83 | width: lerp(from.size.width, to.size.width, progress),
84 | height: lerp(from.size.height, to.size.height, progress)
85 | )
86 | }
87 |
--------------------------------------------------------------------------------
/SwiftyGeometry/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/SwiftyGeometry/SwiftyGeometry.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftyGeometry.h
3 | // SwiftyGeometry
4 | //
5 | // Created by Agustín de Cabrera on 3/9/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | @import UIKit;
10 | @import SwiftyCore;
11 |
12 | //! Project version number for SwiftyGeometry.
13 | FOUNDATION_EXPORT double SwiftyGeometryVersionNumber;
14 |
15 | //! Project version string for SwiftyGeometry.
16 | FOUNDATION_EXPORT const unsigned char SwiftyGeometryVersionString[];
17 |
18 | // In this header, you should import all the public headers of your framework using statements like #import
19 |
20 |
21 |
--------------------------------------------------------------------------------
/SwiftyGeometry/UIEdgeInsets+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIEdgeInsets+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UIEdgeInsets
12 |
13 | extension UIEdgeInsets {
14 | public var topLeft: CGPoint {
15 | return CGPoint(x: left, y: top)
16 | }
17 | public var bottomRight: CGPoint {
18 | return CGPoint(x: right, y: bottom)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/SwiftySwift.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "SwiftySwift"
3 | s.version = "3.1.0"
4 | s.summary = "SwiftySwift is a collection of useful extensions for Swift types and Cocoa objects."
5 | s.homepage = "https://github.com/adeca/SwiftySwift"
6 | s.license = { :type => 'MIT' }
7 | s.authors = { "Agustin de Cabrera" => "agustindc@gmail.com" }
8 | s.source = { :git => "https://github.com/adeca/SwiftySwift.git", :tag => s.version.to_s }
9 | s.requires_arc = true
10 | s.platform = :ios, '8.0'
11 | s.ios.deployment_target = "8.0"
12 |
13 | s.pod_target_xcconfig = {
14 | 'SWIFT_VERSION' => '4.0',
15 | 'SWIFT_SWIFT3_OBJC_INFERENCE' => 'Off',
16 | }
17 |
18 | s.subspec 'Core' do |sub|
19 | sub.source_files = 'SwiftyCore/*.swift'
20 | end
21 |
22 | s.subspec 'Cocoa' do |sub|
23 | sub.source_files = 'SwiftyCocoa/*.swift'
24 | sub.dependency 'SwiftySwift/Core'
25 | end
26 |
27 | s.subspec 'Geometry' do |sub|
28 | sub.source_files = 'SwiftyGeometry/*.swift'
29 | sub.dependency 'SwiftySwift/Core'
30 | end
31 |
32 | s.subspec 'UIKit' do |sub|
33 | sub.source_files = 'SwiftyUIKit/*.swift'
34 | sub.dependency 'SwiftySwift/Cocoa'
35 | end
36 |
37 | s.subspec 'MultiRange' do |sub|
38 | sub.source_files = 'MultiRange/*.swift'
39 | end
40 | end
41 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | E30DDF511C90E9C800FBC536 /* SwiftyCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = E30DDF501C90E9C800FBC536 /* SwiftyCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; };
11 | E30DDF671C90EAD100FBC536 /* SwiftyCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E30DDF5D1C90EAA400FBC536 /* SwiftyCore.framework */; };
12 | E30DDF951C90ECD700FBC536 /* SwiftyCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E30DDF4E1C90E9C800FBC536 /* SwiftyCocoa.framework */; };
13 | E30DDF961C90ECE200FBC536 /* SwiftyCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E30DDF5D1C90EAA400FBC536 /* SwiftyCore.framework */; };
14 | E30DDFAC1C90EF7000FBC536 /* SwiftyCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E30DDF5D1C90EAA400FBC536 /* SwiftyCore.framework */; };
15 | E30DDFAD1C90F2B500FBC536 /* SwiftyGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = E30DDF721C90EC5E00FBC536 /* SwiftyGeometry.h */; settings = {ATTRIBUTES = (Public, ); }; };
16 | E30DDFAE1C90F2BE00FBC536 /* SwiftyCore.h in Headers */ = {isa = PBXBuildFile; fileRef = E30DDF5F1C90EAA400FBC536 /* SwiftyCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
17 | E30DDFAF1C90F2D000FBC536 /* SwiftyUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = E30DDF7F1C90EC6F00FBC536 /* SwiftyUIKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
18 | E30DDFB01C90F2D400FBC536 /* MultiRange.h in Headers */ = {isa = PBXBuildFile; fileRef = E30DDF8C1C90EC7D00FBC536 /* MultiRange.h */; settings = {ATTRIBUTES = (Public, ); }; };
19 | E34D11E11B1D032B000816A9 /* SwiftySwift.h in Headers */ = {isa = PBXBuildFile; fileRef = E34D11E01B1D032B000816A9 /* SwiftySwift.h */; settings = {ATTRIBUTES = (Public, ); }; };
20 | E34D11E71B1D032B000816A9 /* SwiftySwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E34D11DB1B1D032B000816A9 /* SwiftySwift.framework */; };
21 | E34D11EE1B1D032B000816A9 /* SwiftySwiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E34D11ED1B1D032B000816A9 /* SwiftySwiftTests.swift */; };
22 | E3C7CBAA1F63205300719D0E /* FloatingPoint+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C7CBA91F63205300719D0E /* FloatingPoint+Extensions.swift */; };
23 | E3C7CBAB1F632D3100719D0E /* FloatingPoint+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C7CBA91F63205300719D0E /* FloatingPoint+Extensions.swift */; };
24 | E3C7CBAD1F632D9000719D0E /* SignedNumeric+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C7CBAC1F632D9000719D0E /* SignedNumeric+Extensions.swift */; };
25 | E3C7CBAE1F632D9000719D0E /* SignedNumeric+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C7CBAC1F632D9000719D0E /* SignedNumeric+Extensions.swift */; };
26 | E3C7CBB01F63331000719D0E /* UnsignedInteger+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C7CBAF1F63331000719D0E /* UnsignedInteger+Extensions.swift */; };
27 | E3C7CBB11F63331000719D0E /* UnsignedInteger+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C7CBAF1F63331000719D0E /* UnsignedInteger+Extensions.swift */; };
28 | E3C7CBB31F633AD300719D0E /* URL+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C7CBB21F633AD300719D0E /* URL+Extensions.swift */; };
29 | E3C7CBB41F633AD300719D0E /* URL+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C7CBB21F633AD300719D0E /* URL+Extensions.swift */; };
30 | E3D96D321CECF19500D58C9E /* UICollectionView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D291CECF19500D58C9E /* UICollectionView+Extensions.swift */; };
31 | E3D96D331CECF19500D58C9E /* UICollectionView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D291CECF19500D58C9E /* UICollectionView+Extensions.swift */; };
32 | E3D96D341CECF19500D58C9E /* UIColor+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2A1CECF19500D58C9E /* UIColor+Extensions.swift */; };
33 | E3D96D351CECF19500D58C9E /* UIColor+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2A1CECF19500D58C9E /* UIColor+Extensions.swift */; };
34 | E3D96D361CECF19500D58C9E /* UIFont+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2B1CECF19500D58C9E /* UIFont+Extensions.swift */; };
35 | E3D96D371CECF19500D58C9E /* UIFont+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2B1CECF19500D58C9E /* UIFont+Extensions.swift */; };
36 | E3D96D381CECF19500D58C9E /* UIGestureRecognizer+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2C1CECF19500D58C9E /* UIGestureRecognizer+Extensions.swift */; };
37 | E3D96D391CECF19500D58C9E /* UIGestureRecognizer+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2C1CECF19500D58C9E /* UIGestureRecognizer+Extensions.swift */; };
38 | E3D96D3A1CECF19500D58C9E /* UIImage+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2D1CECF19500D58C9E /* UIImage+Extensions.swift */; };
39 | E3D96D3B1CECF19500D58C9E /* UIImage+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2D1CECF19500D58C9E /* UIImage+Extensions.swift */; };
40 | E3D96D3C1CECF19500D58C9E /* UIImageView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2E1CECF19500D58C9E /* UIImageView+Extensions.swift */; };
41 | E3D96D3D1CECF19500D58C9E /* UIImageView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2E1CECF19500D58C9E /* UIImageView+Extensions.swift */; };
42 | E3D96D3E1CECF19500D58C9E /* UITableView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2F1CECF19500D58C9E /* UITableView+Extensions.swift */; };
43 | E3D96D3F1CECF19500D58C9E /* UITableView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D2F1CECF19500D58C9E /* UITableView+Extensions.swift */; };
44 | E3D96D401CECF19500D58C9E /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D301CECF19500D58C9E /* UIView+Extensions.swift */; };
45 | E3D96D411CECF19500D58C9E /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D301CECF19500D58C9E /* UIView+Extensions.swift */; };
46 | E3D96D421CECF19500D58C9E /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D311CECF19500D58C9E /* UIViewController+Extensions.swift */; };
47 | E3D96D431CECF19500D58C9E /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D311CECF19500D58C9E /* UIViewController+Extensions.swift */; };
48 | E3D96D451CECF4DA00D58C9E /* CGPoint+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D441CECF4DA00D58C9E /* CGPoint+Extensions.swift */; };
49 | E3D96D461CECF4DA00D58C9E /* CGPoint+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D441CECF4DA00D58C9E /* CGPoint+Extensions.swift */; };
50 | E3D96D481CECF51400D58C9E /* UIEdgeInsets+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D471CECF51400D58C9E /* UIEdgeInsets+Extensions.swift */; };
51 | E3D96D491CECF51400D58C9E /* UIEdgeInsets+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D471CECF51400D58C9E /* UIEdgeInsets+Extensions.swift */; };
52 | E3D96D4B1CECF57C00D58C9E /* CGRect+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D4A1CECF57C00D58C9E /* CGRect+Extensions.swift */; };
53 | E3D96D4C1CECF57C00D58C9E /* CGRect+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D4A1CECF57C00D58C9E /* CGRect+Extensions.swift */; };
54 | E3D96D4E1CECF5AF00D58C9E /* CGFloatTuple.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D4D1CECF5AF00D58C9E /* CGFloatTuple.swift */; };
55 | E3D96D4F1CECF5AF00D58C9E /* CGFloatTuple.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D4D1CECF5AF00D58C9E /* CGFloatTuple.swift */; };
56 | E3D96D541CECF66700D58C9E /* CGGeometry+CGFloatTuple.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D531CECF66700D58C9E /* CGGeometry+CGFloatTuple.swift */; };
57 | E3D96D551CECF66700D58C9E /* CGGeometry+CGFloatTuple.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D531CECF66700D58C9E /* CGGeometry+CGFloatTuple.swift */; };
58 | E3D96D571CECF6B800D58C9E /* NSObject+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D561CECF6B800D58C9E /* NSObject+Extensions.swift */; };
59 | E3D96D581CECF6B800D58C9E /* NSObject+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D561CECF6B800D58C9E /* NSObject+Extensions.swift */; };
60 | E3D96D5A1CECF6D100D58C9E /* NSThread+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D591CECF6D100D58C9E /* NSThread+Extensions.swift */; };
61 | E3D96D5B1CECF6D100D58C9E /* NSThread+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D591CECF6D100D58C9E /* NSThread+Extensions.swift */; };
62 | E3D96D5D1CECF6EC00D58C9E /* NSLayoutConstraint+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D5C1CECF6EC00D58C9E /* NSLayoutConstraint+Extensions.swift */; };
63 | E3D96D5E1CECF6EC00D58C9E /* NSLayoutConstraint+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D5C1CECF6EC00D58C9E /* NSLayoutConstraint+Extensions.swift */; };
64 | E3D96D631CECF72F00D58C9E /* NSAttributedString+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D621CECF72F00D58C9E /* NSAttributedString+Extensions.swift */; };
65 | E3D96D641CECF72F00D58C9E /* NSAttributedString+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D621CECF72F00D58C9E /* NSAttributedString+Extensions.swift */; };
66 | E3D96D661CECF74200D58C9E /* NSNotificationCenter+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D651CECF74200D58C9E /* NSNotificationCenter+Extensions.swift */; };
67 | E3D96D671CECF74200D58C9E /* NSNotificationCenter+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D651CECF74200D58C9E /* NSNotificationCenter+Extensions.swift */; };
68 | E3D96D691CECF77300D58C9E /* Dispatch+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D681CECF77300D58C9E /* Dispatch+Extensions.swift */; };
69 | E3D96D6A1CECF77300D58C9E /* Dispatch+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D681CECF77300D58C9E /* Dispatch+Extensions.swift */; };
70 | E3D96D6C1CECF85300D58C9E /* SequenceType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D6B1CECF85300D58C9E /* SequenceType+Extensions.swift */; };
71 | E3D96D6D1CECF85300D58C9E /* SequenceType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D6B1CECF85300D58C9E /* SequenceType+Extensions.swift */; };
72 | E3D96D6F1CECF8B200D58C9E /* SortOrder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D6E1CECF8B200D58C9E /* SortOrder.swift */; };
73 | E3D96D701CECF8B200D58C9E /* SortOrder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D6E1CECF8B200D58C9E /* SortOrder.swift */; };
74 | E3D96D721CECF8E200D58C9E /* RangeReplaceableCollectionType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D711CECF8E200D58C9E /* RangeReplaceableCollectionType+Extensions.swift */; };
75 | E3D96D731CECF8E200D58C9E /* RangeReplaceableCollectionType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D711CECF8E200D58C9E /* RangeReplaceableCollectionType+Extensions.swift */; };
76 | E3D96D751CECF8F700D58C9E /* CollectionType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D741CECF8F700D58C9E /* CollectionType+Extensions.swift */; };
77 | E3D96D761CECF8F700D58C9E /* CollectionType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D741CECF8F700D58C9E /* CollectionType+Extensions.swift */; };
78 | E3D96D781CECF91300D58C9E /* Dictionary+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D771CECF91300D58C9E /* Dictionary+Extensions.swift */; };
79 | E3D96D791CECF91300D58C9E /* Dictionary+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D771CECF91300D58C9E /* Dictionary+Extensions.swift */; };
80 | E3D96D7B1CECF93E00D58C9E /* StringLiteralConvertible+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D7A1CECF93E00D58C9E /* StringLiteralConvertible+Extensions.swift */; };
81 | E3D96D7C1CECF93E00D58C9E /* StringLiteralConvertible+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D7A1CECF93E00D58C9E /* StringLiteralConvertible+Extensions.swift */; };
82 | E3D96D7E1CECF97200D58C9E /* Comparable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D7D1CECF97200D58C9E /* Comparable+Extensions.swift */; };
83 | E3D96D7F1CECF97200D58C9E /* Comparable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D7D1CECF97200D58C9E /* Comparable+Extensions.swift */; };
84 | E3D96D811CECF9AA00D58C9E /* OptionalConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D801CECF9AA00D58C9E /* OptionalConvertible.swift */; };
85 | E3D96D821CECF9AA00D58C9E /* OptionalConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D801CECF9AA00D58C9E /* OptionalConvertible.swift */; };
86 | E3D96D841CECF9D100D58C9E /* Optional+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D831CECF9D100D58C9E /* Optional+Extensions.swift */; };
87 | E3D96D851CECF9D100D58C9E /* Optional+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D831CECF9D100D58C9E /* Optional+Extensions.swift */; };
88 | E3D96D871CECF9F600D58C9E /* BinaryInteger+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D861CECF9F600D58C9E /* BinaryInteger+Extensions.swift */; };
89 | E3D96D881CECF9F600D58C9E /* BinaryInteger+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D861CECF9F600D58C9E /* BinaryInteger+Extensions.swift */; };
90 | E3D96D8A1CECFA5900D58C9E /* Swift+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D891CECFA5900D58C9E /* Swift+Extensions.swift */; };
91 | E3D96D8B1CECFA5900D58C9E /* Swift+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D891CECFA5900D58C9E /* Swift+Extensions.swift */; };
92 | E3D96D8D1CECFA7800D58C9E /* MultiRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D8C1CECFA7800D58C9E /* MultiRange.swift */; };
93 | E3D96D8E1CECFA7800D58C9E /* MultiRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D96D8C1CECFA7800D58C9E /* MultiRange.swift */; };
94 | /* End PBXBuildFile section */
95 |
96 | /* Begin PBXContainerItemProxy section */
97 | E30DDF9A1C90EF3A00FBC536 /* PBXContainerItemProxy */ = {
98 | isa = PBXContainerItemProxy;
99 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
100 | proxyType = 1;
101 | remoteGlobalIDString = E30DDF5C1C90EAA400FBC536;
102 | remoteInfo = SwiftyCore;
103 | };
104 | E30DDF9C1C90EF4000FBC536 /* PBXContainerItemProxy */ = {
105 | isa = PBXContainerItemProxy;
106 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
107 | proxyType = 1;
108 | remoteGlobalIDString = E30DDF5C1C90EAA400FBC536;
109 | remoteInfo = SwiftyCore;
110 | };
111 | E30DDF9E1C90EF4500FBC536 /* PBXContainerItemProxy */ = {
112 | isa = PBXContainerItemProxy;
113 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
114 | proxyType = 1;
115 | remoteGlobalIDString = E30DDF5C1C90EAA400FBC536;
116 | remoteInfo = SwiftyCore;
117 | };
118 | E30DDFA01C90EF4900FBC536 /* PBXContainerItemProxy */ = {
119 | isa = PBXContainerItemProxy;
120 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
121 | proxyType = 1;
122 | remoteGlobalIDString = E30DDF4D1C90E9C800FBC536;
123 | remoteInfo = SwiftyCocoa;
124 | };
125 | E30DDFA21C90EF5300FBC536 /* PBXContainerItemProxy */ = {
126 | isa = PBXContainerItemProxy;
127 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
128 | proxyType = 1;
129 | remoteGlobalIDString = E30DDF4D1C90E9C800FBC536;
130 | remoteInfo = SwiftyCocoa;
131 | };
132 | E30DDFA41C90EF5600FBC536 /* PBXContainerItemProxy */ = {
133 | isa = PBXContainerItemProxy;
134 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
135 | proxyType = 1;
136 | remoteGlobalIDString = E30DDF5C1C90EAA400FBC536;
137 | remoteInfo = SwiftyCore;
138 | };
139 | E30DDFA61C90EF5A00FBC536 /* PBXContainerItemProxy */ = {
140 | isa = PBXContainerItemProxy;
141 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
142 | proxyType = 1;
143 | remoteGlobalIDString = E30DDF6F1C90EC5E00FBC536;
144 | remoteInfo = SwiftyGeometry;
145 | };
146 | E30DDFA81C90EF5C00FBC536 /* PBXContainerItemProxy */ = {
147 | isa = PBXContainerItemProxy;
148 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
149 | proxyType = 1;
150 | remoteGlobalIDString = E30DDF7C1C90EC6F00FBC536;
151 | remoteInfo = SwiftyUIKit;
152 | };
153 | E30DDFAA1C90EF5F00FBC536 /* PBXContainerItemProxy */ = {
154 | isa = PBXContainerItemProxy;
155 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
156 | proxyType = 1;
157 | remoteGlobalIDString = E30DDF891C90EC7D00FBC536;
158 | remoteInfo = MultiRange;
159 | };
160 | E34D11E81B1D032B000816A9 /* PBXContainerItemProxy */ = {
161 | isa = PBXContainerItemProxy;
162 | containerPortal = E34D11D21B1D032B000816A9 /* Project object */;
163 | proxyType = 1;
164 | remoteGlobalIDString = E34D11DA1B1D032B000816A9;
165 | remoteInfo = SwiftySwift;
166 | };
167 | /* End PBXContainerItemProxy section */
168 |
169 | /* Begin PBXFileReference section */
170 | E30DDF4E1C90E9C800FBC536 /* SwiftyCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };
171 | E30DDF501C90E9C800FBC536 /* SwiftyCocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftyCocoa.h; sourceTree = ""; };
172 | E30DDF521C90E9C800FBC536 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
173 | E30DDF5D1C90EAA400FBC536 /* SwiftyCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
174 | E30DDF5F1C90EAA400FBC536 /* SwiftyCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftyCore.h; sourceTree = ""; };
175 | E30DDF611C90EAA400FBC536 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
176 | E30DDF701C90EC5E00FBC536 /* SwiftyGeometry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyGeometry.framework; sourceTree = BUILT_PRODUCTS_DIR; };
177 | E30DDF721C90EC5E00FBC536 /* SwiftyGeometry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftyGeometry.h; sourceTree = ""; };
178 | E30DDF741C90EC5E00FBC536 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
179 | E30DDF7D1C90EC6F00FBC536 /* SwiftyUIKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyUIKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
180 | E30DDF7F1C90EC6F00FBC536 /* SwiftyUIKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftyUIKit.h; sourceTree = ""; };
181 | E30DDF811C90EC6F00FBC536 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
182 | E30DDF8A1C90EC7D00FBC536 /* MultiRange.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MultiRange.framework; sourceTree = BUILT_PRODUCTS_DIR; };
183 | E30DDF8C1C90EC7D00FBC536 /* MultiRange.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MultiRange.h; sourceTree = ""; };
184 | E30DDF8E1C90EC7D00FBC536 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
185 | E34D11DB1B1D032B000816A9 /* SwiftySwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftySwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
186 | E34D11DF1B1D032B000816A9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
187 | E34D11E01B1D032B000816A9 /* SwiftySwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftySwift.h; sourceTree = ""; };
188 | E34D11E61B1D032B000816A9 /* SwiftySwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftySwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
189 | E34D11EC1B1D032B000816A9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
190 | E34D11ED1B1D032B000816A9 /* SwiftySwiftTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftySwiftTests.swift; sourceTree = ""; };
191 | E36EDC201EF1DD3200432A23 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
192 | E3A5D2671BE04374002067C2 /* SwiftySwift.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = SwiftySwift.podspec; sourceTree = SOURCE_ROOT; };
193 | E3C7CBA91F63205300719D0E /* FloatingPoint+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FloatingPoint+Extensions.swift"; sourceTree = ""; };
194 | E3C7CBAC1F632D9000719D0E /* SignedNumeric+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SignedNumeric+Extensions.swift"; sourceTree = ""; };
195 | E3C7CBAF1F63331000719D0E /* UnsignedInteger+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UnsignedInteger+Extensions.swift"; sourceTree = ""; };
196 | E3C7CBB21F633AD300719D0E /* URL+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+Extensions.swift"; sourceTree = ""; };
197 | E3D96D291CECF19500D58C9E /* UICollectionView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UICollectionView+Extensions.swift"; sourceTree = ""; };
198 | E3D96D2A1CECF19500D58C9E /* UIColor+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+Extensions.swift"; sourceTree = ""; };
199 | E3D96D2B1CECF19500D58C9E /* UIFont+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIFont+Extensions.swift"; sourceTree = ""; };
200 | E3D96D2C1CECF19500D58C9E /* UIGestureRecognizer+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIGestureRecognizer+Extensions.swift"; sourceTree = ""; };
201 | E3D96D2D1CECF19500D58C9E /* UIImage+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Extensions.swift"; sourceTree = ""; };
202 | E3D96D2E1CECF19500D58C9E /* UIImageView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImageView+Extensions.swift"; sourceTree = ""; };
203 | E3D96D2F1CECF19500D58C9E /* UITableView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITableView+Extensions.swift"; sourceTree = ""; };
204 | E3D96D301CECF19500D58C9E /* UIView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Extensions.swift"; sourceTree = ""; };
205 | E3D96D311CECF19500D58C9E /* UIViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+Extensions.swift"; sourceTree = ""; };
206 | E3D96D441CECF4DA00D58C9E /* CGPoint+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGPoint+Extensions.swift"; sourceTree = ""; };
207 | E3D96D471CECF51400D58C9E /* UIEdgeInsets+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIEdgeInsets+Extensions.swift"; sourceTree = ""; };
208 | E3D96D4A1CECF57C00D58C9E /* CGRect+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGRect+Extensions.swift"; sourceTree = ""; };
209 | E3D96D4D1CECF5AF00D58C9E /* CGFloatTuple.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGFloatTuple.swift; sourceTree = ""; };
210 | E3D96D531CECF66700D58C9E /* CGGeometry+CGFloatTuple.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGGeometry+CGFloatTuple.swift"; sourceTree = ""; };
211 | E3D96D561CECF6B800D58C9E /* NSObject+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSObject+Extensions.swift"; sourceTree = ""; };
212 | E3D96D591CECF6D100D58C9E /* NSThread+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSThread+Extensions.swift"; sourceTree = ""; };
213 | E3D96D5C1CECF6EC00D58C9E /* NSLayoutConstraint+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSLayoutConstraint+Extensions.swift"; sourceTree = ""; };
214 | E3D96D621CECF72F00D58C9E /* NSAttributedString+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSAttributedString+Extensions.swift"; sourceTree = ""; };
215 | E3D96D651CECF74200D58C9E /* NSNotificationCenter+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSNotificationCenter+Extensions.swift"; sourceTree = ""; };
216 | E3D96D681CECF77300D58C9E /* Dispatch+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Dispatch+Extensions.swift"; sourceTree = ""; };
217 | E3D96D6B1CECF85300D58C9E /* SequenceType+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SequenceType+Extensions.swift"; sourceTree = ""; };
218 | E3D96D6E1CECF8B200D58C9E /* SortOrder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SortOrder.swift; sourceTree = ""; };
219 | E3D96D711CECF8E200D58C9E /* RangeReplaceableCollectionType+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RangeReplaceableCollectionType+Extensions.swift"; sourceTree = ""; };
220 | E3D96D741CECF8F700D58C9E /* CollectionType+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CollectionType+Extensions.swift"; sourceTree = ""; };
221 | E3D96D771CECF91300D58C9E /* Dictionary+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Dictionary+Extensions.swift"; sourceTree = ""; };
222 | E3D96D7A1CECF93E00D58C9E /* StringLiteralConvertible+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StringLiteralConvertible+Extensions.swift"; sourceTree = ""; };
223 | E3D96D7D1CECF97200D58C9E /* Comparable+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Comparable+Extensions.swift"; sourceTree = ""; };
224 | E3D96D801CECF9AA00D58C9E /* OptionalConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OptionalConvertible.swift; sourceTree = ""; };
225 | E3D96D831CECF9D100D58C9E /* Optional+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Optional+Extensions.swift"; sourceTree = ""; };
226 | E3D96D861CECF9F600D58C9E /* BinaryInteger+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BinaryInteger+Extensions.swift"; sourceTree = ""; };
227 | E3D96D891CECFA5900D58C9E /* Swift+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Swift+Extensions.swift"; sourceTree = ""; };
228 | E3D96D8C1CECFA7800D58C9E /* MultiRange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiRange.swift; sourceTree = ""; };
229 | /* End PBXFileReference section */
230 |
231 | /* Begin PBXFrameworksBuildPhase section */
232 | E30DDF4A1C90E9C800FBC536 /* Frameworks */ = {
233 | isa = PBXFrameworksBuildPhase;
234 | buildActionMask = 2147483647;
235 | files = (
236 | E30DDF671C90EAD100FBC536 /* SwiftyCore.framework in Frameworks */,
237 | );
238 | runOnlyForDeploymentPostprocessing = 0;
239 | };
240 | E30DDF591C90EAA400FBC536 /* Frameworks */ = {
241 | isa = PBXFrameworksBuildPhase;
242 | buildActionMask = 2147483647;
243 | files = (
244 | );
245 | runOnlyForDeploymentPostprocessing = 0;
246 | };
247 | E30DDF6C1C90EC5E00FBC536 /* Frameworks */ = {
248 | isa = PBXFrameworksBuildPhase;
249 | buildActionMask = 2147483647;
250 | files = (
251 | E30DDF961C90ECE200FBC536 /* SwiftyCore.framework in Frameworks */,
252 | );
253 | runOnlyForDeploymentPostprocessing = 0;
254 | };
255 | E30DDF791C90EC6F00FBC536 /* Frameworks */ = {
256 | isa = PBXFrameworksBuildPhase;
257 | buildActionMask = 2147483647;
258 | files = (
259 | E30DDFAC1C90EF7000FBC536 /* SwiftyCore.framework in Frameworks */,
260 | E30DDF951C90ECD700FBC536 /* SwiftyCocoa.framework in Frameworks */,
261 | );
262 | runOnlyForDeploymentPostprocessing = 0;
263 | };
264 | E30DDF861C90EC7D00FBC536 /* Frameworks */ = {
265 | isa = PBXFrameworksBuildPhase;
266 | buildActionMask = 2147483647;
267 | files = (
268 | );
269 | runOnlyForDeploymentPostprocessing = 0;
270 | };
271 | E34D11D71B1D032B000816A9 /* Frameworks */ = {
272 | isa = PBXFrameworksBuildPhase;
273 | buildActionMask = 2147483647;
274 | files = (
275 | );
276 | runOnlyForDeploymentPostprocessing = 0;
277 | };
278 | E34D11E31B1D032B000816A9 /* Frameworks */ = {
279 | isa = PBXFrameworksBuildPhase;
280 | buildActionMask = 2147483647;
281 | files = (
282 | E34D11E71B1D032B000816A9 /* SwiftySwift.framework in Frameworks */,
283 | );
284 | runOnlyForDeploymentPostprocessing = 0;
285 | };
286 | /* End PBXFrameworksBuildPhase section */
287 |
288 | /* Begin PBXGroup section */
289 | E30DDF4F1C90E9C800FBC536 /* SwiftyCocoa */ = {
290 | isa = PBXGroup;
291 | children = (
292 | E3D96D561CECF6B800D58C9E /* NSObject+Extensions.swift */,
293 | E3D96D591CECF6D100D58C9E /* NSThread+Extensions.swift */,
294 | E3D96D5C1CECF6EC00D58C9E /* NSLayoutConstraint+Extensions.swift */,
295 | E3D96D621CECF72F00D58C9E /* NSAttributedString+Extensions.swift */,
296 | E3D96D651CECF74200D58C9E /* NSNotificationCenter+Extensions.swift */,
297 | E3D96D681CECF77300D58C9E /* Dispatch+Extensions.swift */,
298 | E3C7CBB21F633AD300719D0E /* URL+Extensions.swift */,
299 | E30DDF501C90E9C800FBC536 /* SwiftyCocoa.h */,
300 | E30DDF521C90E9C800FBC536 /* Info.plist */,
301 | );
302 | path = SwiftyCocoa;
303 | sourceTree = "";
304 | };
305 | E30DDF5E1C90EAA400FBC536 /* SwiftyCore */ = {
306 | isa = PBXGroup;
307 | children = (
308 | E3D96D891CECFA5900D58C9E /* Swift+Extensions.swift */,
309 | E3D96D6B1CECF85300D58C9E /* SequenceType+Extensions.swift */,
310 | E3D96D6E1CECF8B200D58C9E /* SortOrder.swift */,
311 | E3D96D711CECF8E200D58C9E /* RangeReplaceableCollectionType+Extensions.swift */,
312 | E3D96D741CECF8F700D58C9E /* CollectionType+Extensions.swift */,
313 | E3D96D771CECF91300D58C9E /* Dictionary+Extensions.swift */,
314 | E3D96D7A1CECF93E00D58C9E /* StringLiteralConvertible+Extensions.swift */,
315 | E3D96D7D1CECF97200D58C9E /* Comparable+Extensions.swift */,
316 | E3D96D801CECF9AA00D58C9E /* OptionalConvertible.swift */,
317 | E3D96D831CECF9D100D58C9E /* Optional+Extensions.swift */,
318 | E3D96D861CECF9F600D58C9E /* BinaryInteger+Extensions.swift */,
319 | E3C7CBA91F63205300719D0E /* FloatingPoint+Extensions.swift */,
320 | E3C7CBAC1F632D9000719D0E /* SignedNumeric+Extensions.swift */,
321 | E3C7CBAF1F63331000719D0E /* UnsignedInteger+Extensions.swift */,
322 | E30DDF5F1C90EAA400FBC536 /* SwiftyCore.h */,
323 | E30DDF611C90EAA400FBC536 /* Info.plist */,
324 | );
325 | path = SwiftyCore;
326 | sourceTree = "";
327 | };
328 | E30DDF711C90EC5E00FBC536 /* SwiftyGeometry */ = {
329 | isa = PBXGroup;
330 | children = (
331 | E3D96D441CECF4DA00D58C9E /* CGPoint+Extensions.swift */,
332 | E3D96D471CECF51400D58C9E /* UIEdgeInsets+Extensions.swift */,
333 | E3D96D4A1CECF57C00D58C9E /* CGRect+Extensions.swift */,
334 | E3D96D4D1CECF5AF00D58C9E /* CGFloatTuple.swift */,
335 | E3D96D531CECF66700D58C9E /* CGGeometry+CGFloatTuple.swift */,
336 | E30DDF721C90EC5E00FBC536 /* SwiftyGeometry.h */,
337 | E30DDF741C90EC5E00FBC536 /* Info.plist */,
338 | );
339 | path = SwiftyGeometry;
340 | sourceTree = "";
341 | };
342 | E30DDF7E1C90EC6F00FBC536 /* SwiftyUIKit */ = {
343 | isa = PBXGroup;
344 | children = (
345 | E3D96D291CECF19500D58C9E /* UICollectionView+Extensions.swift */,
346 | E3D96D2A1CECF19500D58C9E /* UIColor+Extensions.swift */,
347 | E3D96D2B1CECF19500D58C9E /* UIFont+Extensions.swift */,
348 | E3D96D2C1CECF19500D58C9E /* UIGestureRecognizer+Extensions.swift */,
349 | E3D96D2D1CECF19500D58C9E /* UIImage+Extensions.swift */,
350 | E3D96D2E1CECF19500D58C9E /* UIImageView+Extensions.swift */,
351 | E3D96D2F1CECF19500D58C9E /* UITableView+Extensions.swift */,
352 | E3D96D301CECF19500D58C9E /* UIView+Extensions.swift */,
353 | E3D96D311CECF19500D58C9E /* UIViewController+Extensions.swift */,
354 | E30DDF7F1C90EC6F00FBC536 /* SwiftyUIKit.h */,
355 | E30DDF811C90EC6F00FBC536 /* Info.plist */,
356 | );
357 | path = SwiftyUIKit;
358 | sourceTree = "";
359 | };
360 | E30DDF8B1C90EC7D00FBC536 /* MultiRange */ = {
361 | isa = PBXGroup;
362 | children = (
363 | E3D96D8C1CECFA7800D58C9E /* MultiRange.swift */,
364 | E30DDF8C1C90EC7D00FBC536 /* MultiRange.h */,
365 | E30DDF8E1C90EC7D00FBC536 /* Info.plist */,
366 | );
367 | path = MultiRange;
368 | sourceTree = "";
369 | };
370 | E34D11D11B1D032B000816A9 = {
371 | isa = PBXGroup;
372 | children = (
373 | E36EDC201EF1DD3200432A23 /* README.md */,
374 | E34D11DD1B1D032B000816A9 /* SwiftySwift */,
375 | E30DDF5E1C90EAA400FBC536 /* SwiftyCore */,
376 | E30DDF4F1C90E9C800FBC536 /* SwiftyCocoa */,
377 | E30DDF711C90EC5E00FBC536 /* SwiftyGeometry */,
378 | E30DDF7E1C90EC6F00FBC536 /* SwiftyUIKit */,
379 | E30DDF8B1C90EC7D00FBC536 /* MultiRange */,
380 | E34D11EA1B1D032B000816A9 /* SwiftySwiftTests */,
381 | E34D11DC1B1D032B000816A9 /* Products */,
382 | );
383 | sourceTree = "";
384 | };
385 | E34D11DC1B1D032B000816A9 /* Products */ = {
386 | isa = PBXGroup;
387 | children = (
388 | E34D11DB1B1D032B000816A9 /* SwiftySwift.framework */,
389 | E34D11E61B1D032B000816A9 /* SwiftySwiftTests.xctest */,
390 | E30DDF4E1C90E9C800FBC536 /* SwiftyCocoa.framework */,
391 | E30DDF5D1C90EAA400FBC536 /* SwiftyCore.framework */,
392 | E30DDF701C90EC5E00FBC536 /* SwiftyGeometry.framework */,
393 | E30DDF7D1C90EC6F00FBC536 /* SwiftyUIKit.framework */,
394 | E30DDF8A1C90EC7D00FBC536 /* MultiRange.framework */,
395 | );
396 | name = Products;
397 | sourceTree = "";
398 | };
399 | E34D11DD1B1D032B000816A9 /* SwiftySwift */ = {
400 | isa = PBXGroup;
401 | children = (
402 | E34D11E01B1D032B000816A9 /* SwiftySwift.h */,
403 | E3A5D2671BE04374002067C2 /* SwiftySwift.podspec */,
404 | E34D11DF1B1D032B000816A9 /* Info.plist */,
405 | );
406 | path = SwiftySwift;
407 | sourceTree = "";
408 | };
409 | E34D11EA1B1D032B000816A9 /* SwiftySwiftTests */ = {
410 | isa = PBXGroup;
411 | children = (
412 | E34D11ED1B1D032B000816A9 /* SwiftySwiftTests.swift */,
413 | E34D11EC1B1D032B000816A9 /* Info.plist */,
414 | );
415 | path = SwiftySwiftTests;
416 | sourceTree = "";
417 | };
418 | /* End PBXGroup section */
419 |
420 | /* Begin PBXHeadersBuildPhase section */
421 | E30DDF4B1C90E9C800FBC536 /* Headers */ = {
422 | isa = PBXHeadersBuildPhase;
423 | buildActionMask = 2147483647;
424 | files = (
425 | E30DDF511C90E9C800FBC536 /* SwiftyCocoa.h in Headers */,
426 | );
427 | runOnlyForDeploymentPostprocessing = 0;
428 | };
429 | E30DDF5A1C90EAA400FBC536 /* Headers */ = {
430 | isa = PBXHeadersBuildPhase;
431 | buildActionMask = 2147483647;
432 | files = (
433 | E30DDFAE1C90F2BE00FBC536 /* SwiftyCore.h in Headers */,
434 | );
435 | runOnlyForDeploymentPostprocessing = 0;
436 | };
437 | E30DDF6D1C90EC5E00FBC536 /* Headers */ = {
438 | isa = PBXHeadersBuildPhase;
439 | buildActionMask = 2147483647;
440 | files = (
441 | E30DDFAD1C90F2B500FBC536 /* SwiftyGeometry.h in Headers */,
442 | );
443 | runOnlyForDeploymentPostprocessing = 0;
444 | };
445 | E30DDF7A1C90EC6F00FBC536 /* Headers */ = {
446 | isa = PBXHeadersBuildPhase;
447 | buildActionMask = 2147483647;
448 | files = (
449 | E30DDFAF1C90F2D000FBC536 /* SwiftyUIKit.h in Headers */,
450 | );
451 | runOnlyForDeploymentPostprocessing = 0;
452 | };
453 | E30DDF871C90EC7D00FBC536 /* Headers */ = {
454 | isa = PBXHeadersBuildPhase;
455 | buildActionMask = 2147483647;
456 | files = (
457 | E30DDFB01C90F2D400FBC536 /* MultiRange.h in Headers */,
458 | );
459 | runOnlyForDeploymentPostprocessing = 0;
460 | };
461 | E34D11D81B1D032B000816A9 /* Headers */ = {
462 | isa = PBXHeadersBuildPhase;
463 | buildActionMask = 2147483647;
464 | files = (
465 | E34D11E11B1D032B000816A9 /* SwiftySwift.h in Headers */,
466 | );
467 | runOnlyForDeploymentPostprocessing = 0;
468 | };
469 | /* End PBXHeadersBuildPhase section */
470 |
471 | /* Begin PBXNativeTarget section */
472 | E30DDF4D1C90E9C800FBC536 /* SwiftyCocoa */ = {
473 | isa = PBXNativeTarget;
474 | buildConfigurationList = E30DDF551C90E9C800FBC536 /* Build configuration list for PBXNativeTarget "SwiftyCocoa" */;
475 | buildPhases = (
476 | E30DDF491C90E9C800FBC536 /* Sources */,
477 | E30DDF4A1C90E9C800FBC536 /* Frameworks */,
478 | E30DDF4B1C90E9C800FBC536 /* Headers */,
479 | E30DDF4C1C90E9C800FBC536 /* Resources */,
480 | );
481 | buildRules = (
482 | );
483 | dependencies = (
484 | E30DDF9D1C90EF4000FBC536 /* PBXTargetDependency */,
485 | );
486 | name = SwiftyCocoa;
487 | productName = SwiftyCocoa;
488 | productReference = E30DDF4E1C90E9C800FBC536 /* SwiftyCocoa.framework */;
489 | productType = "com.apple.product-type.framework";
490 | };
491 | E30DDF5C1C90EAA400FBC536 /* SwiftyCore */ = {
492 | isa = PBXNativeTarget;
493 | buildConfigurationList = E30DDF621C90EAA400FBC536 /* Build configuration list for PBXNativeTarget "SwiftyCore" */;
494 | buildPhases = (
495 | E30DDF581C90EAA400FBC536 /* Sources */,
496 | E30DDF591C90EAA400FBC536 /* Frameworks */,
497 | E30DDF5A1C90EAA400FBC536 /* Headers */,
498 | E30DDF5B1C90EAA400FBC536 /* Resources */,
499 | );
500 | buildRules = (
501 | );
502 | dependencies = (
503 | );
504 | name = SwiftyCore;
505 | productName = SwiftyCore;
506 | productReference = E30DDF5D1C90EAA400FBC536 /* SwiftyCore.framework */;
507 | productType = "com.apple.product-type.framework";
508 | };
509 | E30DDF6F1C90EC5E00FBC536 /* SwiftyGeometry */ = {
510 | isa = PBXNativeTarget;
511 | buildConfigurationList = E30DDF751C90EC5E00FBC536 /* Build configuration list for PBXNativeTarget "SwiftyGeometry" */;
512 | buildPhases = (
513 | E30DDF6B1C90EC5E00FBC536 /* Sources */,
514 | E30DDF6C1C90EC5E00FBC536 /* Frameworks */,
515 | E30DDF6D1C90EC5E00FBC536 /* Headers */,
516 | E30DDF6E1C90EC5E00FBC536 /* Resources */,
517 | );
518 | buildRules = (
519 | );
520 | dependencies = (
521 | E30DDF9B1C90EF3A00FBC536 /* PBXTargetDependency */,
522 | );
523 | name = SwiftyGeometry;
524 | productName = SwiftyGeometry;
525 | productReference = E30DDF701C90EC5E00FBC536 /* SwiftyGeometry.framework */;
526 | productType = "com.apple.product-type.framework";
527 | };
528 | E30DDF7C1C90EC6F00FBC536 /* SwiftyUIKit */ = {
529 | isa = PBXNativeTarget;
530 | buildConfigurationList = E30DDF821C90EC6F00FBC536 /* Build configuration list for PBXNativeTarget "SwiftyUIKit" */;
531 | buildPhases = (
532 | E30DDF781C90EC6F00FBC536 /* Sources */,
533 | E30DDF791C90EC6F00FBC536 /* Frameworks */,
534 | E30DDF7A1C90EC6F00FBC536 /* Headers */,
535 | E30DDF7B1C90EC6F00FBC536 /* Resources */,
536 | );
537 | buildRules = (
538 | );
539 | dependencies = (
540 | E30DDFA11C90EF4900FBC536 /* PBXTargetDependency */,
541 | E30DDF9F1C90EF4500FBC536 /* PBXTargetDependency */,
542 | );
543 | name = SwiftyUIKit;
544 | productName = SwiftyUIKit;
545 | productReference = E30DDF7D1C90EC6F00FBC536 /* SwiftyUIKit.framework */;
546 | productType = "com.apple.product-type.framework";
547 | };
548 | E30DDF891C90EC7D00FBC536 /* MultiRange */ = {
549 | isa = PBXNativeTarget;
550 | buildConfigurationList = E30DDF8F1C90EC7D00FBC536 /* Build configuration list for PBXNativeTarget "MultiRange" */;
551 | buildPhases = (
552 | E30DDF851C90EC7D00FBC536 /* Sources */,
553 | E30DDF861C90EC7D00FBC536 /* Frameworks */,
554 | E30DDF871C90EC7D00FBC536 /* Headers */,
555 | E30DDF881C90EC7D00FBC536 /* Resources */,
556 | );
557 | buildRules = (
558 | );
559 | dependencies = (
560 | );
561 | name = MultiRange;
562 | productName = MultiRange;
563 | productReference = E30DDF8A1C90EC7D00FBC536 /* MultiRange.framework */;
564 | productType = "com.apple.product-type.framework";
565 | };
566 | E34D11DA1B1D032B000816A9 /* SwiftySwift */ = {
567 | isa = PBXNativeTarget;
568 | buildConfigurationList = E34D11F11B1D032B000816A9 /* Build configuration list for PBXNativeTarget "SwiftySwift" */;
569 | buildPhases = (
570 | E34D11D61B1D032B000816A9 /* Sources */,
571 | E34D11D71B1D032B000816A9 /* Frameworks */,
572 | E34D11D81B1D032B000816A9 /* Headers */,
573 | E34D11D91B1D032B000816A9 /* Resources */,
574 | );
575 | buildRules = (
576 | );
577 | dependencies = (
578 | E30DDFAB1C90EF5F00FBC536 /* PBXTargetDependency */,
579 | E30DDFA91C90EF5C00FBC536 /* PBXTargetDependency */,
580 | E30DDFA71C90EF5A00FBC536 /* PBXTargetDependency */,
581 | E30DDFA31C90EF5300FBC536 /* PBXTargetDependency */,
582 | E30DDFA51C90EF5600FBC536 /* PBXTargetDependency */,
583 | );
584 | name = SwiftySwift;
585 | productName = SwiftySwift;
586 | productReference = E34D11DB1B1D032B000816A9 /* SwiftySwift.framework */;
587 | productType = "com.apple.product-type.framework";
588 | };
589 | E34D11E51B1D032B000816A9 /* SwiftySwiftTests */ = {
590 | isa = PBXNativeTarget;
591 | buildConfigurationList = E34D11F41B1D032B000816A9 /* Build configuration list for PBXNativeTarget "SwiftySwiftTests" */;
592 | buildPhases = (
593 | E34D11E21B1D032B000816A9 /* Sources */,
594 | E34D11E31B1D032B000816A9 /* Frameworks */,
595 | E34D11E41B1D032B000816A9 /* Resources */,
596 | );
597 | buildRules = (
598 | );
599 | dependencies = (
600 | E34D11E91B1D032B000816A9 /* PBXTargetDependency */,
601 | );
602 | name = SwiftySwiftTests;
603 | productName = SwiftySwiftTests;
604 | productReference = E34D11E61B1D032B000816A9 /* SwiftySwiftTests.xctest */;
605 | productType = "com.apple.product-type.bundle.unit-test";
606 | };
607 | /* End PBXNativeTarget section */
608 |
609 | /* Begin PBXProject section */
610 | E34D11D21B1D032B000816A9 /* Project object */ = {
611 | isa = PBXProject;
612 | attributes = {
613 | LastSwiftUpdateCheck = 0730;
614 | LastUpgradeCheck = 0700;
615 | ORGANIZATIONNAME = "Agustín de Cabrera";
616 | TargetAttributes = {
617 | E30DDF4D1C90E9C800FBC536 = {
618 | CreatedOnToolsVersion = 7.2;
619 | DevelopmentTeam = 8SZVBV2U3L;
620 | DevelopmentTeamName = "Agustin de Cabrera (Personal Team)";
621 | LastSwiftMigration = 0900;
622 | ProvisioningStyle = Automatic;
623 | };
624 | E30DDF5C1C90EAA400FBC536 = {
625 | CreatedOnToolsVersion = 7.2;
626 | DevelopmentTeam = 8SZVBV2U3L;
627 | DevelopmentTeamName = "Agustin de Cabrera (Personal Team)";
628 | LastSwiftMigration = 0900;
629 | ProvisioningStyle = Automatic;
630 | };
631 | E30DDF6F1C90EC5E00FBC536 = {
632 | CreatedOnToolsVersion = 7.2;
633 | DevelopmentTeam = 8SZVBV2U3L;
634 | DevelopmentTeamName = "Agustin de Cabrera (Personal Team)";
635 | LastSwiftMigration = 0900;
636 | ProvisioningStyle = Automatic;
637 | };
638 | E30DDF7C1C90EC6F00FBC536 = {
639 | CreatedOnToolsVersion = 7.2;
640 | DevelopmentTeam = 8SZVBV2U3L;
641 | DevelopmentTeamName = "Agustin de Cabrera (Personal Team)";
642 | LastSwiftMigration = 0900;
643 | ProvisioningStyle = Automatic;
644 | };
645 | E30DDF891C90EC7D00FBC536 = {
646 | CreatedOnToolsVersion = 7.2;
647 | DevelopmentTeam = 8SZVBV2U3L;
648 | DevelopmentTeamName = "Agustin de Cabrera (Personal Team)";
649 | LastSwiftMigration = 0900;
650 | ProvisioningStyle = Automatic;
651 | };
652 | E34D11DA1B1D032B000816A9 = {
653 | CreatedOnToolsVersion = 6.3.2;
654 | DevelopmentTeam = 8SZVBV2U3L;
655 | DevelopmentTeamName = "Agustin de Cabrera (Personal Team)";
656 | LastSwiftMigration = 0900;
657 | ProvisioningStyle = Automatic;
658 | };
659 | E34D11E51B1D032B000816A9 = {
660 | CreatedOnToolsVersion = 6.3.2;
661 | DevelopmentTeam = 8SZVBV2U3L;
662 | DevelopmentTeamName = "Agustin de Cabrera (Personal Team)";
663 | LastSwiftMigration = 0900;
664 | ProvisioningStyle = Automatic;
665 | };
666 | };
667 | };
668 | buildConfigurationList = E34D11D51B1D032B000816A9 /* Build configuration list for PBXProject "SwiftySwift" */;
669 | compatibilityVersion = "Xcode 3.2";
670 | developmentRegion = English;
671 | hasScannedForEncodings = 0;
672 | knownRegions = (
673 | en,
674 | );
675 | mainGroup = E34D11D11B1D032B000816A9;
676 | productRefGroup = E34D11DC1B1D032B000816A9 /* Products */;
677 | projectDirPath = "";
678 | projectRoot = "";
679 | targets = (
680 | E34D11DA1B1D032B000816A9 /* SwiftySwift */,
681 | E34D11E51B1D032B000816A9 /* SwiftySwiftTests */,
682 | E30DDF4D1C90E9C800FBC536 /* SwiftyCocoa */,
683 | E30DDF5C1C90EAA400FBC536 /* SwiftyCore */,
684 | E30DDF6F1C90EC5E00FBC536 /* SwiftyGeometry */,
685 | E30DDF7C1C90EC6F00FBC536 /* SwiftyUIKit */,
686 | E30DDF891C90EC7D00FBC536 /* MultiRange */,
687 | );
688 | };
689 | /* End PBXProject section */
690 |
691 | /* Begin PBXResourcesBuildPhase section */
692 | E30DDF4C1C90E9C800FBC536 /* Resources */ = {
693 | isa = PBXResourcesBuildPhase;
694 | buildActionMask = 2147483647;
695 | files = (
696 | );
697 | runOnlyForDeploymentPostprocessing = 0;
698 | };
699 | E30DDF5B1C90EAA400FBC536 /* Resources */ = {
700 | isa = PBXResourcesBuildPhase;
701 | buildActionMask = 2147483647;
702 | files = (
703 | );
704 | runOnlyForDeploymentPostprocessing = 0;
705 | };
706 | E30DDF6E1C90EC5E00FBC536 /* Resources */ = {
707 | isa = PBXResourcesBuildPhase;
708 | buildActionMask = 2147483647;
709 | files = (
710 | );
711 | runOnlyForDeploymentPostprocessing = 0;
712 | };
713 | E30DDF7B1C90EC6F00FBC536 /* Resources */ = {
714 | isa = PBXResourcesBuildPhase;
715 | buildActionMask = 2147483647;
716 | files = (
717 | );
718 | runOnlyForDeploymentPostprocessing = 0;
719 | };
720 | E30DDF881C90EC7D00FBC536 /* Resources */ = {
721 | isa = PBXResourcesBuildPhase;
722 | buildActionMask = 2147483647;
723 | files = (
724 | );
725 | runOnlyForDeploymentPostprocessing = 0;
726 | };
727 | E34D11D91B1D032B000816A9 /* Resources */ = {
728 | isa = PBXResourcesBuildPhase;
729 | buildActionMask = 2147483647;
730 | files = (
731 | );
732 | runOnlyForDeploymentPostprocessing = 0;
733 | };
734 | E34D11E41B1D032B000816A9 /* Resources */ = {
735 | isa = PBXResourcesBuildPhase;
736 | buildActionMask = 2147483647;
737 | files = (
738 | );
739 | runOnlyForDeploymentPostprocessing = 0;
740 | };
741 | /* End PBXResourcesBuildPhase section */
742 |
743 | /* Begin PBXSourcesBuildPhase section */
744 | E30DDF491C90E9C800FBC536 /* Sources */ = {
745 | isa = PBXSourcesBuildPhase;
746 | buildActionMask = 2147483647;
747 | files = (
748 | E3D96D641CECF72F00D58C9E /* NSAttributedString+Extensions.swift in Sources */,
749 | E3C7CBB41F633AD300719D0E /* URL+Extensions.swift in Sources */,
750 | E3D96D5E1CECF6EC00D58C9E /* NSLayoutConstraint+Extensions.swift in Sources */,
751 | E3D96D581CECF6B800D58C9E /* NSObject+Extensions.swift in Sources */,
752 | E3D96D5B1CECF6D100D58C9E /* NSThread+Extensions.swift in Sources */,
753 | E3D96D671CECF74200D58C9E /* NSNotificationCenter+Extensions.swift in Sources */,
754 | E3D96D6A1CECF77300D58C9E /* Dispatch+Extensions.swift in Sources */,
755 | );
756 | runOnlyForDeploymentPostprocessing = 0;
757 | };
758 | E30DDF581C90EAA400FBC536 /* Sources */ = {
759 | isa = PBXSourcesBuildPhase;
760 | buildActionMask = 2147483647;
761 | files = (
762 | E3D96D7C1CECF93E00D58C9E /* StringLiteralConvertible+Extensions.swift in Sources */,
763 | E3D96D881CECF9F600D58C9E /* BinaryInteger+Extensions.swift in Sources */,
764 | E3D96D851CECF9D100D58C9E /* Optional+Extensions.swift in Sources */,
765 | E3D96D731CECF8E200D58C9E /* RangeReplaceableCollectionType+Extensions.swift in Sources */,
766 | E3D96D761CECF8F700D58C9E /* CollectionType+Extensions.swift in Sources */,
767 | E3D96D8B1CECFA5900D58C9E /* Swift+Extensions.swift in Sources */,
768 | E3D96D701CECF8B200D58C9E /* SortOrder.swift in Sources */,
769 | E3D96D6D1CECF85300D58C9E /* SequenceType+Extensions.swift in Sources */,
770 | E3D96D791CECF91300D58C9E /* Dictionary+Extensions.swift in Sources */,
771 | E3D96D821CECF9AA00D58C9E /* OptionalConvertible.swift in Sources */,
772 | E3C7CBB11F63331000719D0E /* UnsignedInteger+Extensions.swift in Sources */,
773 | E3C7CBAA1F63205300719D0E /* FloatingPoint+Extensions.swift in Sources */,
774 | E3D96D7F1CECF97200D58C9E /* Comparable+Extensions.swift in Sources */,
775 | E3C7CBAE1F632D9000719D0E /* SignedNumeric+Extensions.swift in Sources */,
776 | );
777 | runOnlyForDeploymentPostprocessing = 0;
778 | };
779 | E30DDF6B1C90EC5E00FBC536 /* Sources */ = {
780 | isa = PBXSourcesBuildPhase;
781 | buildActionMask = 2147483647;
782 | files = (
783 | E3D96D491CECF51400D58C9E /* UIEdgeInsets+Extensions.swift in Sources */,
784 | E3D96D4C1CECF57C00D58C9E /* CGRect+Extensions.swift in Sources */,
785 | E3D96D551CECF66700D58C9E /* CGGeometry+CGFloatTuple.swift in Sources */,
786 | E3D96D461CECF4DA00D58C9E /* CGPoint+Extensions.swift in Sources */,
787 | E3D96D4F1CECF5AF00D58C9E /* CGFloatTuple.swift in Sources */,
788 | );
789 | runOnlyForDeploymentPostprocessing = 0;
790 | };
791 | E30DDF781C90EC6F00FBC536 /* Sources */ = {
792 | isa = PBXSourcesBuildPhase;
793 | buildActionMask = 2147483647;
794 | files = (
795 | E3D96D3D1CECF19500D58C9E /* UIImageView+Extensions.swift in Sources */,
796 | E3D96D3F1CECF19500D58C9E /* UITableView+Extensions.swift in Sources */,
797 | E3D96D331CECF19500D58C9E /* UICollectionView+Extensions.swift in Sources */,
798 | E3D96D371CECF19500D58C9E /* UIFont+Extensions.swift in Sources */,
799 | E3D96D431CECF19500D58C9E /* UIViewController+Extensions.swift in Sources */,
800 | E3D96D3B1CECF19500D58C9E /* UIImage+Extensions.swift in Sources */,
801 | E3D96D351CECF19500D58C9E /* UIColor+Extensions.swift in Sources */,
802 | E3D96D411CECF19500D58C9E /* UIView+Extensions.swift in Sources */,
803 | E3D96D391CECF19500D58C9E /* UIGestureRecognizer+Extensions.swift in Sources */,
804 | );
805 | runOnlyForDeploymentPostprocessing = 0;
806 | };
807 | E30DDF851C90EC7D00FBC536 /* Sources */ = {
808 | isa = PBXSourcesBuildPhase;
809 | buildActionMask = 2147483647;
810 | files = (
811 | E3D96D8E1CECFA7800D58C9E /* MultiRange.swift in Sources */,
812 | );
813 | runOnlyForDeploymentPostprocessing = 0;
814 | };
815 | E34D11D61B1D032B000816A9 /* Sources */ = {
816 | isa = PBXSourcesBuildPhase;
817 | buildActionMask = 2147483647;
818 | files = (
819 | E3D96D871CECF9F600D58C9E /* BinaryInteger+Extensions.swift in Sources */,
820 | E3D96D3C1CECF19500D58C9E /* UIImageView+Extensions.swift in Sources */,
821 | E3D96D781CECF91300D58C9E /* Dictionary+Extensions.swift in Sources */,
822 | E3D96D8D1CECFA7800D58C9E /* MultiRange.swift in Sources */,
823 | E3D96D421CECF19500D58C9E /* UIViewController+Extensions.swift in Sources */,
824 | E3D96D721CECF8E200D58C9E /* RangeReplaceableCollectionType+Extensions.swift in Sources */,
825 | E3D96D8A1CECFA5900D58C9E /* Swift+Extensions.swift in Sources */,
826 | E3D96D341CECF19500D58C9E /* UIColor+Extensions.swift in Sources */,
827 | E3D96D751CECF8F700D58C9E /* CollectionType+Extensions.swift in Sources */,
828 | E3D96D4E1CECF5AF00D58C9E /* CGFloatTuple.swift in Sources */,
829 | E3D96D5A1CECF6D100D58C9E /* NSThread+Extensions.swift in Sources */,
830 | E3D96D691CECF77300D58C9E /* Dispatch+Extensions.swift in Sources */,
831 | E3D96D4B1CECF57C00D58C9E /* CGRect+Extensions.swift in Sources */,
832 | E3C7CBB31F633AD300719D0E /* URL+Extensions.swift in Sources */,
833 | E3C7CBAD1F632D9000719D0E /* SignedNumeric+Extensions.swift in Sources */,
834 | E3C7CBAB1F632D3100719D0E /* FloatingPoint+Extensions.swift in Sources */,
835 | E3D96D6F1CECF8B200D58C9E /* SortOrder.swift in Sources */,
836 | E3D96D321CECF19500D58C9E /* UICollectionView+Extensions.swift in Sources */,
837 | E3D96D401CECF19500D58C9E /* UIView+Extensions.swift in Sources */,
838 | E3D96D7B1CECF93E00D58C9E /* StringLiteralConvertible+Extensions.swift in Sources */,
839 | E3D96D571CECF6B800D58C9E /* NSObject+Extensions.swift in Sources */,
840 | E3D96D6C1CECF85300D58C9E /* SequenceType+Extensions.swift in Sources */,
841 | E3D96D661CECF74200D58C9E /* NSNotificationCenter+Extensions.swift in Sources */,
842 | E3D96D631CECF72F00D58C9E /* NSAttributedString+Extensions.swift in Sources */,
843 | E3D96D841CECF9D100D58C9E /* Optional+Extensions.swift in Sources */,
844 | E3D96D481CECF51400D58C9E /* UIEdgeInsets+Extensions.swift in Sources */,
845 | E3D96D5D1CECF6EC00D58C9E /* NSLayoutConstraint+Extensions.swift in Sources */,
846 | E3D96D451CECF4DA00D58C9E /* CGPoint+Extensions.swift in Sources */,
847 | E3D96D3E1CECF19500D58C9E /* UITableView+Extensions.swift in Sources */,
848 | E3D96D811CECF9AA00D58C9E /* OptionalConvertible.swift in Sources */,
849 | E3D96D7E1CECF97200D58C9E /* Comparable+Extensions.swift in Sources */,
850 | E3D96D3A1CECF19500D58C9E /* UIImage+Extensions.swift in Sources */,
851 | E3C7CBB01F63331000719D0E /* UnsignedInteger+Extensions.swift in Sources */,
852 | E3D96D361CECF19500D58C9E /* UIFont+Extensions.swift in Sources */,
853 | E3D96D541CECF66700D58C9E /* CGGeometry+CGFloatTuple.swift in Sources */,
854 | E3D96D381CECF19500D58C9E /* UIGestureRecognizer+Extensions.swift in Sources */,
855 | );
856 | runOnlyForDeploymentPostprocessing = 0;
857 | };
858 | E34D11E21B1D032B000816A9 /* Sources */ = {
859 | isa = PBXSourcesBuildPhase;
860 | buildActionMask = 2147483647;
861 | files = (
862 | E34D11EE1B1D032B000816A9 /* SwiftySwiftTests.swift in Sources */,
863 | );
864 | runOnlyForDeploymentPostprocessing = 0;
865 | };
866 | /* End PBXSourcesBuildPhase section */
867 |
868 | /* Begin PBXTargetDependency section */
869 | E30DDF9B1C90EF3A00FBC536 /* PBXTargetDependency */ = {
870 | isa = PBXTargetDependency;
871 | target = E30DDF5C1C90EAA400FBC536 /* SwiftyCore */;
872 | targetProxy = E30DDF9A1C90EF3A00FBC536 /* PBXContainerItemProxy */;
873 | };
874 | E30DDF9D1C90EF4000FBC536 /* PBXTargetDependency */ = {
875 | isa = PBXTargetDependency;
876 | target = E30DDF5C1C90EAA400FBC536 /* SwiftyCore */;
877 | targetProxy = E30DDF9C1C90EF4000FBC536 /* PBXContainerItemProxy */;
878 | };
879 | E30DDF9F1C90EF4500FBC536 /* PBXTargetDependency */ = {
880 | isa = PBXTargetDependency;
881 | target = E30DDF5C1C90EAA400FBC536 /* SwiftyCore */;
882 | targetProxy = E30DDF9E1C90EF4500FBC536 /* PBXContainerItemProxy */;
883 | };
884 | E30DDFA11C90EF4900FBC536 /* PBXTargetDependency */ = {
885 | isa = PBXTargetDependency;
886 | target = E30DDF4D1C90E9C800FBC536 /* SwiftyCocoa */;
887 | targetProxy = E30DDFA01C90EF4900FBC536 /* PBXContainerItemProxy */;
888 | };
889 | E30DDFA31C90EF5300FBC536 /* PBXTargetDependency */ = {
890 | isa = PBXTargetDependency;
891 | target = E30DDF4D1C90E9C800FBC536 /* SwiftyCocoa */;
892 | targetProxy = E30DDFA21C90EF5300FBC536 /* PBXContainerItemProxy */;
893 | };
894 | E30DDFA51C90EF5600FBC536 /* PBXTargetDependency */ = {
895 | isa = PBXTargetDependency;
896 | target = E30DDF5C1C90EAA400FBC536 /* SwiftyCore */;
897 | targetProxy = E30DDFA41C90EF5600FBC536 /* PBXContainerItemProxy */;
898 | };
899 | E30DDFA71C90EF5A00FBC536 /* PBXTargetDependency */ = {
900 | isa = PBXTargetDependency;
901 | target = E30DDF6F1C90EC5E00FBC536 /* SwiftyGeometry */;
902 | targetProxy = E30DDFA61C90EF5A00FBC536 /* PBXContainerItemProxy */;
903 | };
904 | E30DDFA91C90EF5C00FBC536 /* PBXTargetDependency */ = {
905 | isa = PBXTargetDependency;
906 | target = E30DDF7C1C90EC6F00FBC536 /* SwiftyUIKit */;
907 | targetProxy = E30DDFA81C90EF5C00FBC536 /* PBXContainerItemProxy */;
908 | };
909 | E30DDFAB1C90EF5F00FBC536 /* PBXTargetDependency */ = {
910 | isa = PBXTargetDependency;
911 | target = E30DDF891C90EC7D00FBC536 /* MultiRange */;
912 | targetProxy = E30DDFAA1C90EF5F00FBC536 /* PBXContainerItemProxy */;
913 | };
914 | E34D11E91B1D032B000816A9 /* PBXTargetDependency */ = {
915 | isa = PBXTargetDependency;
916 | target = E34D11DA1B1D032B000816A9 /* SwiftySwift */;
917 | targetProxy = E34D11E81B1D032B000816A9 /* PBXContainerItemProxy */;
918 | };
919 | /* End PBXTargetDependency section */
920 |
921 | /* Begin XCBuildConfiguration section */
922 | E30DDF531C90E9C800FBC536 /* Debug */ = {
923 | isa = XCBuildConfiguration;
924 | buildSettings = {
925 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
926 | DEBUG_INFORMATION_FORMAT = dwarf;
927 | DEFINES_MODULE = YES;
928 | DYLIB_COMPATIBILITY_VERSION = 1;
929 | DYLIB_CURRENT_VERSION = 1;
930 | DYLIB_INSTALL_NAME_BASE = "@rpath";
931 | INFOPLIST_FILE = SwiftyCocoa/Info.plist;
932 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
933 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
934 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
935 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.SwiftyCocoa;
936 | PRODUCT_NAME = "$(TARGET_NAME)";
937 | SKIP_INSTALL = YES;
938 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
939 | SWIFT_VERSION = 4.0;
940 | };
941 | name = Debug;
942 | };
943 | E30DDF541C90E9C800FBC536 /* Release */ = {
944 | isa = XCBuildConfiguration;
945 | buildSettings = {
946 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
947 | DEFINES_MODULE = YES;
948 | DYLIB_COMPATIBILITY_VERSION = 1;
949 | DYLIB_CURRENT_VERSION = 1;
950 | DYLIB_INSTALL_NAME_BASE = "@rpath";
951 | INFOPLIST_FILE = SwiftyCocoa/Info.plist;
952 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
953 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
954 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
955 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.SwiftyCocoa;
956 | PRODUCT_NAME = "$(TARGET_NAME)";
957 | SKIP_INSTALL = YES;
958 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
959 | SWIFT_VERSION = 4.0;
960 | };
961 | name = Release;
962 | };
963 | E30DDF631C90EAA400FBC536 /* Debug */ = {
964 | isa = XCBuildConfiguration;
965 | buildSettings = {
966 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
967 | DEBUG_INFORMATION_FORMAT = dwarf;
968 | DEFINES_MODULE = YES;
969 | DYLIB_COMPATIBILITY_VERSION = 1;
970 | DYLIB_CURRENT_VERSION = 1;
971 | DYLIB_INSTALL_NAME_BASE = "@rpath";
972 | INFOPLIST_FILE = SwiftyCore/Info.plist;
973 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
974 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
975 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
976 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.SwiftyCore;
977 | PRODUCT_NAME = "$(TARGET_NAME)";
978 | SKIP_INSTALL = YES;
979 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
980 | SWIFT_VERSION = 4.0;
981 | };
982 | name = Debug;
983 | };
984 | E30DDF641C90EAA400FBC536 /* Release */ = {
985 | isa = XCBuildConfiguration;
986 | buildSettings = {
987 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
988 | DEFINES_MODULE = YES;
989 | DYLIB_COMPATIBILITY_VERSION = 1;
990 | DYLIB_CURRENT_VERSION = 1;
991 | DYLIB_INSTALL_NAME_BASE = "@rpath";
992 | INFOPLIST_FILE = SwiftyCore/Info.plist;
993 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
994 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
995 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
996 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.SwiftyCore;
997 | PRODUCT_NAME = "$(TARGET_NAME)";
998 | SKIP_INSTALL = YES;
999 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1000 | SWIFT_VERSION = 4.0;
1001 | };
1002 | name = Release;
1003 | };
1004 | E30DDF761C90EC5E00FBC536 /* Debug */ = {
1005 | isa = XCBuildConfiguration;
1006 | buildSettings = {
1007 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1008 | DEBUG_INFORMATION_FORMAT = dwarf;
1009 | DEFINES_MODULE = YES;
1010 | DYLIB_COMPATIBILITY_VERSION = 1;
1011 | DYLIB_CURRENT_VERSION = 1;
1012 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1013 | INFOPLIST_FILE = SwiftyGeometry/Info.plist;
1014 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1015 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1016 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1017 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.SwiftyGeometry;
1018 | PRODUCT_NAME = "$(TARGET_NAME)";
1019 | SKIP_INSTALL = YES;
1020 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1021 | SWIFT_VERSION = 4.0;
1022 | };
1023 | name = Debug;
1024 | };
1025 | E30DDF771C90EC5E00FBC536 /* Release */ = {
1026 | isa = XCBuildConfiguration;
1027 | buildSettings = {
1028 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1029 | DEFINES_MODULE = YES;
1030 | DYLIB_COMPATIBILITY_VERSION = 1;
1031 | DYLIB_CURRENT_VERSION = 1;
1032 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1033 | INFOPLIST_FILE = SwiftyGeometry/Info.plist;
1034 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1035 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1036 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1037 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.SwiftyGeometry;
1038 | PRODUCT_NAME = "$(TARGET_NAME)";
1039 | SKIP_INSTALL = YES;
1040 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1041 | SWIFT_VERSION = 4.0;
1042 | };
1043 | name = Release;
1044 | };
1045 | E30DDF831C90EC6F00FBC536 /* Debug */ = {
1046 | isa = XCBuildConfiguration;
1047 | buildSettings = {
1048 | CLANG_ENABLE_MODULES = YES;
1049 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1050 | DEBUG_INFORMATION_FORMAT = dwarf;
1051 | DEFINES_MODULE = YES;
1052 | DYLIB_COMPATIBILITY_VERSION = 1;
1053 | DYLIB_CURRENT_VERSION = 1;
1054 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1055 | INFOPLIST_FILE = SwiftyUIKit/Info.plist;
1056 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1057 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1058 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1059 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.SwiftyUIKit;
1060 | PRODUCT_NAME = "$(TARGET_NAME)";
1061 | SKIP_INSTALL = YES;
1062 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1063 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1064 | SWIFT_VERSION = 4.0;
1065 | };
1066 | name = Debug;
1067 | };
1068 | E30DDF841C90EC6F00FBC536 /* Release */ = {
1069 | isa = XCBuildConfiguration;
1070 | buildSettings = {
1071 | CLANG_ENABLE_MODULES = YES;
1072 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1073 | DEFINES_MODULE = YES;
1074 | DYLIB_COMPATIBILITY_VERSION = 1;
1075 | DYLIB_CURRENT_VERSION = 1;
1076 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1077 | INFOPLIST_FILE = SwiftyUIKit/Info.plist;
1078 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1079 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1080 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1081 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.SwiftyUIKit;
1082 | PRODUCT_NAME = "$(TARGET_NAME)";
1083 | SKIP_INSTALL = YES;
1084 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1085 | SWIFT_VERSION = 4.0;
1086 | };
1087 | name = Release;
1088 | };
1089 | E30DDF901C90EC7D00FBC536 /* Debug */ = {
1090 | isa = XCBuildConfiguration;
1091 | buildSettings = {
1092 | CLANG_ENABLE_MODULES = YES;
1093 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1094 | DEBUG_INFORMATION_FORMAT = dwarf;
1095 | DEFINES_MODULE = YES;
1096 | DYLIB_COMPATIBILITY_VERSION = 1;
1097 | DYLIB_CURRENT_VERSION = 1;
1098 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1099 | INFOPLIST_FILE = MultiRange/Info.plist;
1100 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1101 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1102 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1103 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.MultiRange;
1104 | PRODUCT_NAME = "$(TARGET_NAME)";
1105 | PROVISIONING_PROFILE_SPECIFIER = "";
1106 | SKIP_INSTALL = YES;
1107 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1108 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1109 | SWIFT_VERSION = 4.0;
1110 | };
1111 | name = Debug;
1112 | };
1113 | E30DDF911C90EC7D00FBC536 /* Release */ = {
1114 | isa = XCBuildConfiguration;
1115 | buildSettings = {
1116 | CLANG_ENABLE_MODULES = YES;
1117 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1118 | DEFINES_MODULE = YES;
1119 | DYLIB_COMPATIBILITY_VERSION = 1;
1120 | DYLIB_CURRENT_VERSION = 1;
1121 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1122 | INFOPLIST_FILE = MultiRange/Info.plist;
1123 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1124 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1125 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1126 | PRODUCT_BUNDLE_IDENTIFIER = com.adc.MultiRange;
1127 | PRODUCT_NAME = "$(TARGET_NAME)";
1128 | PROVISIONING_PROFILE_SPECIFIER = "";
1129 | SKIP_INSTALL = YES;
1130 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1131 | SWIFT_VERSION = 4.0;
1132 | };
1133 | name = Release;
1134 | };
1135 | E34D11EF1B1D032B000816A9 /* Debug */ = {
1136 | isa = XCBuildConfiguration;
1137 | buildSettings = {
1138 | ALWAYS_SEARCH_USER_PATHS = NO;
1139 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
1140 | CLANG_CXX_LIBRARY = "libc++";
1141 | CLANG_ENABLE_MODULES = YES;
1142 | CLANG_ENABLE_OBJC_ARC = YES;
1143 | CLANG_WARN_BOOL_CONVERSION = YES;
1144 | CLANG_WARN_CONSTANT_CONVERSION = YES;
1145 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
1146 | CLANG_WARN_EMPTY_BODY = YES;
1147 | CLANG_WARN_ENUM_CONVERSION = YES;
1148 | CLANG_WARN_INT_CONVERSION = YES;
1149 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
1150 | CLANG_WARN_UNREACHABLE_CODE = YES;
1151 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1152 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1153 | COPY_PHASE_STRIP = NO;
1154 | CURRENT_PROJECT_VERSION = 1;
1155 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1156 | ENABLE_STRICT_OBJC_MSGSEND = YES;
1157 | ENABLE_TESTABILITY = YES;
1158 | GCC_C_LANGUAGE_STANDARD = gnu99;
1159 | GCC_DYNAMIC_NO_PIC = NO;
1160 | GCC_NO_COMMON_BLOCKS = YES;
1161 | GCC_OPTIMIZATION_LEVEL = 0;
1162 | GCC_PREPROCESSOR_DEFINITIONS = (
1163 | "DEBUG=1",
1164 | "$(inherited)",
1165 | );
1166 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
1167 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
1168 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
1169 | GCC_WARN_UNDECLARED_SELECTOR = YES;
1170 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
1171 | GCC_WARN_UNUSED_FUNCTION = YES;
1172 | GCC_WARN_UNUSED_VARIABLE = YES;
1173 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1174 | MTL_ENABLE_DEBUG_INFO = YES;
1175 | ONLY_ACTIVE_ARCH = YES;
1176 | SDKROOT = iphoneos;
1177 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1178 | TARGETED_DEVICE_FAMILY = "1,2";
1179 | VERSIONING_SYSTEM = "apple-generic";
1180 | VERSION_INFO_PREFIX = "";
1181 | };
1182 | name = Debug;
1183 | };
1184 | E34D11F01B1D032B000816A9 /* Release */ = {
1185 | isa = XCBuildConfiguration;
1186 | buildSettings = {
1187 | ALWAYS_SEARCH_USER_PATHS = NO;
1188 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
1189 | CLANG_CXX_LIBRARY = "libc++";
1190 | CLANG_ENABLE_MODULES = YES;
1191 | CLANG_ENABLE_OBJC_ARC = YES;
1192 | CLANG_WARN_BOOL_CONVERSION = YES;
1193 | CLANG_WARN_CONSTANT_CONVERSION = YES;
1194 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
1195 | CLANG_WARN_EMPTY_BODY = YES;
1196 | CLANG_WARN_ENUM_CONVERSION = YES;
1197 | CLANG_WARN_INT_CONVERSION = YES;
1198 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
1199 | CLANG_WARN_UNREACHABLE_CODE = YES;
1200 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1201 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1202 | COPY_PHASE_STRIP = NO;
1203 | CURRENT_PROJECT_VERSION = 1;
1204 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1205 | ENABLE_NS_ASSERTIONS = NO;
1206 | ENABLE_STRICT_OBJC_MSGSEND = YES;
1207 | GCC_C_LANGUAGE_STANDARD = gnu99;
1208 | GCC_NO_COMMON_BLOCKS = YES;
1209 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
1210 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
1211 | GCC_WARN_UNDECLARED_SELECTOR = YES;
1212 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
1213 | GCC_WARN_UNUSED_FUNCTION = YES;
1214 | GCC_WARN_UNUSED_VARIABLE = YES;
1215 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1216 | MTL_ENABLE_DEBUG_INFO = NO;
1217 | SDKROOT = iphoneos;
1218 | TARGETED_DEVICE_FAMILY = "1,2";
1219 | VALIDATE_PRODUCT = YES;
1220 | VERSIONING_SYSTEM = "apple-generic";
1221 | VERSION_INFO_PREFIX = "";
1222 | };
1223 | name = Release;
1224 | };
1225 | E34D11F21B1D032B000816A9 /* Debug */ = {
1226 | isa = XCBuildConfiguration;
1227 | buildSettings = {
1228 | CLANG_ENABLE_MODULES = YES;
1229 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1230 | DEFINES_MODULE = YES;
1231 | DYLIB_COMPATIBILITY_VERSION = 1;
1232 | DYLIB_CURRENT_VERSION = 1;
1233 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1234 | INFOPLIST_FILE = SwiftySwift/Info.plist;
1235 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1236 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1237 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1238 | PRODUCT_BUNDLE_IDENTIFIER = "com.adc.$(PRODUCT_NAME:rfc1034identifier)";
1239 | PRODUCT_NAME = "$(TARGET_NAME)";
1240 | SKIP_INSTALL = YES;
1241 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1242 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1243 | SWIFT_VERSION = 4.0;
1244 | };
1245 | name = Debug;
1246 | };
1247 | E34D11F31B1D032B000816A9 /* Release */ = {
1248 | isa = XCBuildConfiguration;
1249 | buildSettings = {
1250 | CLANG_ENABLE_MODULES = YES;
1251 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1252 | DEFINES_MODULE = YES;
1253 | DYLIB_COMPATIBILITY_VERSION = 1;
1254 | DYLIB_CURRENT_VERSION = 1;
1255 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1256 | INFOPLIST_FILE = SwiftySwift/Info.plist;
1257 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1258 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1259 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1260 | PRODUCT_BUNDLE_IDENTIFIER = "com.adc.$(PRODUCT_NAME:rfc1034identifier)";
1261 | PRODUCT_NAME = "$(TARGET_NAME)";
1262 | SKIP_INSTALL = YES;
1263 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1264 | SWIFT_VERSION = 4.0;
1265 | };
1266 | name = Release;
1267 | };
1268 | E34D11F51B1D032B000816A9 /* Debug */ = {
1269 | isa = XCBuildConfiguration;
1270 | buildSettings = {
1271 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1272 | GCC_PREPROCESSOR_DEFINITIONS = (
1273 | "DEBUG=1",
1274 | "$(inherited)",
1275 | );
1276 | INFOPLIST_FILE = SwiftySwiftTests/Info.plist;
1277 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1278 | PRODUCT_BUNDLE_IDENTIFIER = "com.adc.$(PRODUCT_NAME:rfc1034identifier)";
1279 | PRODUCT_NAME = "$(TARGET_NAME)";
1280 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1281 | SWIFT_VERSION = 4.0;
1282 | };
1283 | name = Debug;
1284 | };
1285 | E34D11F61B1D032B000816A9 /* Release */ = {
1286 | isa = XCBuildConfiguration;
1287 | buildSettings = {
1288 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1289 | INFOPLIST_FILE = SwiftySwiftTests/Info.plist;
1290 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1291 | PRODUCT_BUNDLE_IDENTIFIER = "com.adc.$(PRODUCT_NAME:rfc1034identifier)";
1292 | PRODUCT_NAME = "$(TARGET_NAME)";
1293 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
1294 | SWIFT_VERSION = 4.0;
1295 | };
1296 | name = Release;
1297 | };
1298 | /* End XCBuildConfiguration section */
1299 |
1300 | /* Begin XCConfigurationList section */
1301 | E30DDF551C90E9C800FBC536 /* Build configuration list for PBXNativeTarget "SwiftyCocoa" */ = {
1302 | isa = XCConfigurationList;
1303 | buildConfigurations = (
1304 | E30DDF531C90E9C800FBC536 /* Debug */,
1305 | E30DDF541C90E9C800FBC536 /* Release */,
1306 | );
1307 | defaultConfigurationIsVisible = 0;
1308 | defaultConfigurationName = Release;
1309 | };
1310 | E30DDF621C90EAA400FBC536 /* Build configuration list for PBXNativeTarget "SwiftyCore" */ = {
1311 | isa = XCConfigurationList;
1312 | buildConfigurations = (
1313 | E30DDF631C90EAA400FBC536 /* Debug */,
1314 | E30DDF641C90EAA400FBC536 /* Release */,
1315 | );
1316 | defaultConfigurationIsVisible = 0;
1317 | defaultConfigurationName = Release;
1318 | };
1319 | E30DDF751C90EC5E00FBC536 /* Build configuration list for PBXNativeTarget "SwiftyGeometry" */ = {
1320 | isa = XCConfigurationList;
1321 | buildConfigurations = (
1322 | E30DDF761C90EC5E00FBC536 /* Debug */,
1323 | E30DDF771C90EC5E00FBC536 /* Release */,
1324 | );
1325 | defaultConfigurationIsVisible = 0;
1326 | defaultConfigurationName = Release;
1327 | };
1328 | E30DDF821C90EC6F00FBC536 /* Build configuration list for PBXNativeTarget "SwiftyUIKit" */ = {
1329 | isa = XCConfigurationList;
1330 | buildConfigurations = (
1331 | E30DDF831C90EC6F00FBC536 /* Debug */,
1332 | E30DDF841C90EC6F00FBC536 /* Release */,
1333 | );
1334 | defaultConfigurationIsVisible = 0;
1335 | defaultConfigurationName = Release;
1336 | };
1337 | E30DDF8F1C90EC7D00FBC536 /* Build configuration list for PBXNativeTarget "MultiRange" */ = {
1338 | isa = XCConfigurationList;
1339 | buildConfigurations = (
1340 | E30DDF901C90EC7D00FBC536 /* Debug */,
1341 | E30DDF911C90EC7D00FBC536 /* Release */,
1342 | );
1343 | defaultConfigurationIsVisible = 0;
1344 | defaultConfigurationName = Release;
1345 | };
1346 | E34D11D51B1D032B000816A9 /* Build configuration list for PBXProject "SwiftySwift" */ = {
1347 | isa = XCConfigurationList;
1348 | buildConfigurations = (
1349 | E34D11EF1B1D032B000816A9 /* Debug */,
1350 | E34D11F01B1D032B000816A9 /* Release */,
1351 | );
1352 | defaultConfigurationIsVisible = 0;
1353 | defaultConfigurationName = Release;
1354 | };
1355 | E34D11F11B1D032B000816A9 /* Build configuration list for PBXNativeTarget "SwiftySwift" */ = {
1356 | isa = XCConfigurationList;
1357 | buildConfigurations = (
1358 | E34D11F21B1D032B000816A9 /* Debug */,
1359 | E34D11F31B1D032B000816A9 /* Release */,
1360 | );
1361 | defaultConfigurationIsVisible = 0;
1362 | defaultConfigurationName = Release;
1363 | };
1364 | E34D11F41B1D032B000816A9 /* Build configuration list for PBXNativeTarget "SwiftySwiftTests" */ = {
1365 | isa = XCConfigurationList;
1366 | buildConfigurations = (
1367 | E34D11F51B1D032B000816A9 /* Debug */,
1368 | E34D11F61B1D032B000816A9 /* Release */,
1369 | );
1370 | defaultConfigurationIsVisible = 0;
1371 | defaultConfigurationName = Release;
1372 | };
1373 | /* End XCConfigurationList section */
1374 | };
1375 | rootObject = E34D11D21B1D032B000816A9 /* Project object */;
1376 | }
1377 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/xcshareddata/IDETemplateMacros.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | FILEHEADER
6 |
7 | // ___FILENAME___
8 | // ___PACKAGENAME___
9 | //
10 | // ___COPYRIGHT___
11 | //
12 |
13 |
14 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/xcshareddata/xcschemes/MultiRange.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/xcshareddata/xcschemes/SwiftyCocoa.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/xcshareddata/xcschemes/SwiftyCore.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/xcshareddata/xcschemes/SwiftyGeometry.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/xcshareddata/xcschemes/SwiftySwift.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
67 |
68 |
78 |
79 |
85 |
86 |
87 |
88 |
89 |
90 |
96 |
97 |
103 |
104 |
105 |
106 |
108 |
109 |
112 |
113 |
114 |
--------------------------------------------------------------------------------
/SwiftySwift.xcodeproj/xcshareddata/xcschemes/SwiftyUIKit.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/SwiftySwift/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/SwiftySwift/SwiftySwift.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftySwift.h
3 | // SwiftySwift
4 | //
5 | // Created by Agustín de Cabrera on 6/1/15.
6 | // Copyright (c) 2015 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | @import UIKit;
10 |
11 | //! Project version number for SwiftySwift.
12 | FOUNDATION_EXPORT double SwiftySwiftVersionNumber;
13 |
14 | //! Project version string for SwiftySwift.
15 | FOUNDATION_EXPORT const unsigned char SwiftySwiftVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/SwiftySwiftTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/SwiftySwiftTests/SwiftySwiftTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftySwiftTests.swift
3 | // SwiftySwiftTests
4 | //
5 | // Created by Agustín de Cabrera on 6/1/15.
6 | // Copyright (c) 2015 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import XCTest
11 | import SwiftySwift
12 |
13 | class SwiftySwiftTests: XCTestCase {
14 | override func setUp() {
15 | super.setUp()
16 | }
17 |
18 | override func tearDown() {
19 | super.tearDown()
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/SwiftyUIKit/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/SwiftyUIKit/SwiftyUIKit.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftyUIKit.h
3 | // SwiftyUIKit
4 | //
5 | // Created by Agustín de Cabrera on 3/9/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | @import UIKit;
10 | @import SwiftyCore;
11 | @import SwiftyCocoa;
12 |
13 | //! Project version number for SwiftyUIKit.
14 | FOUNDATION_EXPORT double SwiftyUIKitVersionNumber;
15 |
16 | //! Project version string for SwiftyUIKit.
17 | FOUNDATION_EXPORT const unsigned char SwiftyUIKitVersionString[];
18 |
19 | // In this header, you should import all the public headers of your framework using statements like #import
20 |
21 |
22 |
--------------------------------------------------------------------------------
/SwiftyUIKit/UICollectionView+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UICollectionView+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UICollectionView
12 |
13 | extension UICollectionView {
14 | public var collectionViewFlowLayout: UICollectionViewFlowLayout {
15 | get { return collectionViewLayout as! UICollectionViewFlowLayout }
16 | set { collectionViewLayout = newValue }
17 | }
18 |
19 | public var numberOfItems: Int {
20 | return (0..(forIndexPath indexPath: IndexPath) -> T {
26 | return dequeueReusableCell(withReuseIdentifier: T.cellIdentifier, for: indexPath) as! T
27 | }
28 |
29 | public func dequeueReusableSupplementaryView(ofKind elementKind: String, forIndexPath indexPath: IndexPath) -> T {
30 | return dequeueReusableSupplementaryView(ofKind: elementKind, withReuseIdentifier: T.className, for: indexPath) as! T
31 | }
32 | }
33 |
34 | // MARK: - UICollectionViewCell
35 |
36 | extension UICollectionViewCell {
37 | public static var cellIdentifier: String {
38 | return className
39 | }
40 |
41 | public class func dequeueReusableCell(fromCollectionView collectionView: UICollectionView, indexPath: IndexPath) -> Self {
42 | return collectionView.dequeueReusableCell(forIndexPath: indexPath)
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/SwiftyUIKit/UIColor+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIColor+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UIColor
12 |
13 | extension UIColor {
14 | public typealias RGBA = (r: UInt, g: UInt, b: UInt, a: UInt)
15 | public convenience init(rgba: RGBA) {
16 | self.init(
17 | rgb: (rgba.r, rgba.g, rgba.b),
18 | alpha: CGFloat(rgba.a)/255.0
19 | )
20 | }
21 |
22 | public typealias RGB = (r: UInt, g: UInt, b: UInt)
23 | public convenience init(rgb: RGB, alpha: CGFloat = 1.0) {
24 | self.init(
25 | red: CGFloat(rgb.r)/255.0,
26 | green: CGFloat(rgb.g)/255.0,
27 | blue: CGFloat(rgb.b)/255.0,
28 | alpha: alpha
29 | )
30 | }
31 |
32 | public convenience init(hex: UInt64, alpha: CGFloat = 1.0) {
33 | let r = UInt((hex & 0xff0000) >> 16)
34 | let g = UInt((hex & 0x00ff00) >> 8)
35 | let b = UInt((hex & 0x0000ff))
36 |
37 | self.init(rgb: (r, g, b), alpha: alpha)
38 | }
39 |
40 | public class func randomColor() -> UIColor {
41 | let component = { CGFloat(drand48()) }
42 | return UIColor(red: component(), green: component(), blue: component(), alpha: 1.0)
43 | }
44 |
45 | public var rgbComponents: RGB? {
46 | guard let c = rgbaComponents else { return nil }
47 |
48 | return (r: c.r, g: c.g, b: c.b)
49 | }
50 |
51 | public var rgbaComponents: RGBA? {
52 | guard let c = self.components else { return nil }
53 |
54 | return (
55 | r: UInt(c.r * 255),
56 | g: UInt(c.g * 255),
57 | b: UInt(c.b * 255),
58 | a: UInt(c.a * 255)
59 | )
60 | }
61 |
62 | public typealias Components = (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat)
63 | public var components: Components? {
64 | var r: CGFloat = 0
65 | var g: CGFloat = 0
66 | var b: CGFloat = 0
67 | var a: CGFloat = 0
68 | if self.getRed(&r, green: &g, blue: &b, alpha: &a) {
69 | return (r, g, b, a)
70 | } else {
71 | // Could not extract RGBA components
72 | return nil
73 | }
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/SwiftyUIKit/UIFont+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIFont+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UIFont
12 |
13 | extension UIFont {
14 | public func fontWithSymbolicTraits(_ symbolicTraits: UIFontDescriptorSymbolicTraits) -> UIFont {
15 | let currentDescriptor = fontDescriptor
16 | let descriptor = currentDescriptor.withSymbolicTraits(symbolicTraits) ?? currentDescriptor
17 | return UIFont(descriptor: descriptor, size: 0)
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/SwiftyUIKit/UIGestureRecognizer+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIGestureRecognizer+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UIGestureRecognizer
12 |
13 | extension UIGestureRecognizer {
14 | public func removeFromView() {
15 | view?.removeGestureRecognizer(self)
16 | }
17 |
18 | public func cancel() {
19 | // used to clear pending gestures
20 | isEnabled = false
21 | isEnabled = true
22 | }
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/SwiftyUIKit/UIImage+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UIImage
12 |
13 | extension UIImage {
14 | private static let imagesCache = NSCache()
15 |
16 | public class func cachedImage(contentsOfFile path: String) -> UIImage? {
17 | let cacheKey = path as NSString
18 | if let cached = imagesCache.object(forKey: cacheKey) {
19 | return cached
20 | }
21 |
22 | if let image = UIImage(contentsOfFile: path) {
23 | imagesCache.setObject(image, forKey: cacheKey)
24 | return image
25 | }
26 |
27 | return nil
28 | }
29 |
30 | public class func tiledImage(named name: String) -> UIImage? {
31 | return self.init(named: name)?.resizableImage(withCapInsets: .zero)
32 | }
33 |
34 | public class func imageByRenderingView(_ view: UIView) -> UIImage {
35 | let oldAlpha = view.alpha
36 | view.alpha = 1
37 | let image = imageByRenderingLayer(view.layer)
38 | view.alpha = oldAlpha
39 |
40 | return image
41 | }
42 |
43 | //TODO: use context APIs
44 |
45 | public class func imageByRenderingLayer(_ layer: CALayer) -> UIImage {
46 | UIGraphicsBeginImageContext(layer.bounds.size)
47 | let context = UIGraphicsGetCurrentContext()!
48 | layer.render(in: context)
49 |
50 | let image = UIGraphicsGetImageFromCurrentImageContext()!
51 | UIGraphicsEndImageContext();
52 |
53 | return image
54 | }
55 |
56 | public class func image(withColor color: UIColor) -> UIImage {
57 | let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
58 | UIGraphicsBeginImageContext(rect.size)
59 | let context = UIGraphicsGetCurrentContext()!
60 | context.setFillColor(color.cgColor)
61 | context.fill(rect)
62 |
63 | let image = UIGraphicsGetImageFromCurrentImageContext()!
64 | UIGraphicsEndImageContext()
65 |
66 | return image
67 | }
68 |
69 | public func image(withOrientation orientation: UIImageOrientation) -> UIImage? {
70 | if let cgImage = self.cgImage {
71 | return UIImage(cgImage: cgImage, scale: scale, orientation: orientation)
72 | } else if let ciImage = self.ciImage {
73 | return UIImage(ciImage: ciImage, scale: scale, orientation: orientation)
74 | } else {
75 | return nil
76 | }
77 | }
78 |
79 | public func verticallyMirrored() -> UIImage? {
80 | return image(withOrientation: imageOrientation.verticallyMirrored)
81 | }
82 |
83 | public func horizontallyMirrored() -> UIImage? {
84 | return image(withOrientation: imageOrientation.horizontallyMirrored)
85 | }
86 | }
87 |
88 | // MARK: - UIImageOrientation
89 |
90 | extension UIImageOrientation {
91 | public var verticallyMirrored: UIImageOrientation {
92 | switch (self) {
93 | case .up: return .downMirrored;
94 | case .down: return .upMirrored;
95 | case .left: return .leftMirrored;
96 | case .right: return .rightMirrored;
97 | case .upMirrored: return .down;
98 | case .downMirrored: return .up;
99 | case .leftMirrored: return .left;
100 | case .rightMirrored: return .right;
101 | }
102 | }
103 |
104 | public var horizontallyMirrored: UIImageOrientation {
105 | switch (self) {
106 | case .up: return .upMirrored;
107 | case .down: return .downMirrored;
108 | case .left: return .rightMirrored;
109 | case .right: return .leftMirrored;
110 | case .upMirrored: return .up;
111 | case .downMirrored: return .down;
112 | case .leftMirrored: return .right;
113 | case .rightMirrored: return .left;
114 | }
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/SwiftyUIKit/UIImageView+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIImageView+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UIImageView
12 |
13 | extension UIImageView {
14 | public convenience init?(imageNamed name: String) {
15 | self.init(image: UIImage(named: name))
16 | }
17 |
18 | public var imageOrientation: UIImageOrientation? {
19 | get { return image?.imageOrientation }
20 | set { image = newValue.flatMap { image?.image(withOrientation: $0) } }
21 | }
22 |
23 | public func mirrorVertically() {
24 | image = image?.verticallyMirrored()
25 | }
26 | public func mirrorHorizontally() {
27 | image = image?.horizontallyMirrored()
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/SwiftyUIKit/UITableView+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UITableView+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UITableView
12 |
13 | extension UITableView {
14 | public var numberOfRows: Int {
15 | return (0..() -> T? {
39 | return dequeueReusableCell(withIdentifier: T.cellIdentifier) as? T
40 | }
41 |
42 | public func dequeueReusableCell(forIndexPath indexPath: IndexPath) -> T {
43 | return dequeueReusableCell(withIdentifier: T.cellIdentifier, for: indexPath) as! T
44 | }
45 |
46 | public func dequeueReusableHeaderFooterView() -> T? {
47 | return self.dequeueReusableHeaderFooterView(withIdentifier: T.defaultIdentifier) as? T
48 | }
49 | }
50 |
51 | // MARK: - UITableViewCell
52 |
53 | extension UITableViewCell {
54 | public static var cellIdentifier: String {
55 | return className
56 | }
57 |
58 | public class func dequeueReusableCell(fromTableView tableView: UITableView) -> Self? {
59 | return tableView.dequeueReusableCell()
60 | }
61 |
62 | public class func dequeueReusableCell(fromTableView tableView: UITableView, indexPath: IndexPath) -> Self {
63 | return tableView.dequeueReusableCell(forIndexPath: indexPath)
64 | }
65 | }
66 |
67 | // MARK: - UITableViewHeaderFooterView
68 |
69 | extension UITableViewHeaderFooterView {
70 | public static var defaultIdentifier: String {
71 | return className
72 | }
73 |
74 | public class func dequeue(fromTableView tableView: UITableView) -> Self? {
75 | return tableView.dequeueReusableHeaderFooterView()
76 | }
77 |
78 | public class func registerNib(inTableView tableView: UITableView, bundle: Bundle? = nil) {
79 | let nib = UINib(nibName: defaultIdentifier, bundle: bundle)
80 | tableView.register(nib, forHeaderFooterViewReuseIdentifier: defaultIdentifier)
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/SwiftyUIKit/UIView+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UIView
12 |
13 | extension UIView {
14 | public func removeSubviews() {
15 | for subview in subviews {
16 | subview.removeFromSuperview()
17 | }
18 | }
19 |
20 | public class func fromNib(named name: String) -> Self? {
21 | let allObjects = Bundle.main.loadNibNamed(name, owner: nil, options: nil) ?? []
22 | return castFirst(allObjects)
23 | }
24 |
25 | public class func fromNib() -> Self? {
26 | return fromNib(named: className)
27 | }
28 |
29 | public func applyContainedViewConstraints() {
30 | translatesAutoresizingMaskIntoConstraints = false
31 | superview?.addConstraints(containedViewConstraints())
32 | }
33 |
34 | public func containedViewConstraints() -> [NSLayoutConstraint] {
35 | let views = ["self": self]
36 | let formats = ["V:|[self]|", "H:|[self]|"]
37 |
38 | return NSLayoutConstraint.constraints(withVisualFormats: formats, options: [], metrics: nil, views: views)
39 | }
40 |
41 | public func containedViewConstraints(withHeight height: CGFloat) -> [NSLayoutConstraint] {
42 | let views = ["self": self]
43 | let metrics = ["height": height]
44 | let formats = ["V:|[self(height)]", "H:|[self]|"]
45 |
46 | return NSLayoutConstraint.constraints(withVisualFormats: formats, options: [], metrics: metrics, views: views)
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/SwiftyUIKit/UIViewController+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIViewController+Extensions.swift
3 | // SwiftySwift
4 | //
5 | // Created by Agustin De Cabrera on 5/18/16.
6 | // Copyright © 2016 Agustín de Cabrera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: - UIViewController
12 |
13 | extension UIViewController {
14 | public class func fromStoryboard(named name: String, identifier: String) -> UIViewController? {
15 | return fromStoryboard(UIStoryboard(name: name, bundle: nil), identifier: identifier)
16 | }
17 | public class func fromStoryboard(_ storyboard: UIStoryboard, identifier: String) -> UIViewController? {
18 | return storyboard.instantiateViewController(withIdentifier: identifier)
19 | }
20 |
21 | public class func fromStoryboard(named name: String) -> Self? {
22 | return fromStoryboard(UIStoryboard(name: name, bundle: nil))
23 | }
24 | public class func fromStoryboard(_ storyboard: UIStoryboard) -> Self? {
25 | return controllerFromStoryboard(storyboard)
26 | }
27 | }
28 |
29 | private func controllerFromStoryboard(_ storyboard: UIStoryboard) -> T? {
30 | return T.fromStoryboard(storyboard, identifier: T.className) as? T
31 | }
32 |
--------------------------------------------------------------------------------