Skip to content

Commit

Permalink
Merge pull request #45 from dbsystel/swift4
Browse files Browse the repository at this point in the history
Swift4
  • Loading branch information
lightsprint09 authored Sep 20, 2017
2 parents b3f82c0 + 58eabf5 commit 5ba426e
Show file tree
Hide file tree
Showing 19 changed files with 191 additions and 75 deletions.
15 changes: 6 additions & 9 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,36 +17,33 @@ matrix:
script:
- swift test --verbose
- os: osx
osx_image: xcode8.3
osx_image: xcode9
language: objective-c
env: "macOS"
script:
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=OS X' test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -enableCodeCoverage NO | xcpretty
- os: osx
osx_image: xcode8.3
osx_image: xcode9
language: objective-c
env: "iOS"
script:
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=iOS Simulator,name=iPhone SE,OS=latest' test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -enableCodeCoverage YES | xcpretty
after_success:
- bash <(curl -s https://codecov.io/bash)
- os: osx
osx_image: xcode8.3
osx_image: xcode9
language: objective-c
env: "watchOS"
before_install:
- export SNAPSHOT_FORCE_DELETE=1
- fastlane snapshot reset_simulators
script:
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=watchOS Simulator,name=Apple Watch - 38mm,OS=latest' build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=watchOS Simulator,name=Apple Watch Series 2 - 38mm' build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty
- os: osx
osx_image: xcode8.3
osx_image: xcode9
language: objective-c
env: "tvOS"
script:
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=tvOS Simulator,name=Apple TV 1080p,OS=latest' test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -enableCodeCoverage NO | xcpretty
- os: osx
osx_image: xcode8.3
osx_image: xcode9
language: objective-c
env: "SPM, Carthage, CocoaPods"
script:
Expand Down
48 changes: 41 additions & 7 deletions DBNetworkStack.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,16 @@
C6461F081E0167FA00E0B081 /* RetryTaskTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6461F061E0167FA00E0B081 /* RetryTaskTest.swift */; };
C65F087B1D757A3C00239CC1 /* JSONMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65F087A1D757A3C00239CC1 /* JSONMappable.swift */; };
C68FF1F51E1A64CB00A2513F /* Ressource+Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = C68FF1F41E1A64CB00A2513F /* Ressource+Map.swift */; };
C69546B01F45770B006ABCE6 /* URLSessionDataTask+NetworkTaskRepresenting.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69546AF1F45770B006ABCE6 /* URLSessionDataTask+NetworkTaskRepresenting.swift */; };
C69188671EE6865E00BAD320 /* Resource+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69188661EE6865E00BAD320 /* Resource+Decodable.swift */; };
C691886A1EE6897900BAD320 /* DecodableResoureTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69188681EE688F700BAD320 /* DecodableResoureTest.swift */; };
C699E0771D917501006FE7C6 /* NetworkErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C699E0761D917501006FE7C6 /* NetworkErrorTest.swift */; };
C6A5DED41D760CC900BC38B1 /* JSONResourceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A5DED31D760CC900BC38B1 /* JSONResourceTest.swift */; };
C6A5DED61D760E5000BC38B1 /* NetworkAccessMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A5DED51D760E5000BC38B1 /* NetworkAccessMock.swift */; };
C6A5DEDA1D76A06000BC38B1 /* TrainModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A5DED91D76A06000BC38B1 /* TrainModel.swift */; };
C6C21A391F21F90A0004A7EB /* NetworkResponseProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C21A381F21F90A0004A7EB /* NetworkResponseProcessor.swift */; };
C6C395941E04212F00413AD2 /* ModifyRequestNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C395931E04212F00413AD2 /* ModifyRequestNetworkService.swift */; };
C6C395961E0422AF00413AD2 /* ModifyRequestNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C395951E0422AF00413AD2 /* ModifyRequestNetworkService.swift */; };
C6E429721F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6E429711F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift */; };
C6F235D51D7DA75000E628D8 /* URLSession+NetworkAccessProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F235D41D7DA75000E628D8 /* URLSession+NetworkAccessProviding.swift */; };
C6F7E3101E49DCBA00FA625F /* NetworkTaskMockTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F7E30E1E49DC4900FA625F /* NetworkTaskMockTests.swift */; };
/* End PBXBuildFile section */
Expand Down Expand Up @@ -94,6 +96,8 @@
C6461F0A1E016C7700E0B081 /* NetworkServiceMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkServiceMock.swift; sourceTree = "<group>"; };
C65F087A1D757A3C00239CC1 /* JSONMappable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONMappable.swift; sourceTree = "<group>"; };
C68FF1F41E1A64CB00A2513F /* Ressource+Map.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Ressource+Map.swift"; sourceTree = "<group>"; };
C69188661EE6865E00BAD320 /* Resource+Decodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Resource+Decodable.swift"; sourceTree = "<group>"; };
C69188681EE688F700BAD320 /* DecodableResoureTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecodableResoureTest.swift; sourceTree = "<group>"; };
C69546AF1F45770B006ABCE6 /* URLSessionDataTask+NetworkTaskRepresenting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "URLSessionDataTask+NetworkTaskRepresenting.swift"; sourceTree = "<group>"; };
C699E0761D917501006FE7C6 /* NetworkErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkErrorTest.swift; sourceTree = "<group>"; };
C6A5DED31D760CC900BC38B1 /* JSONResourceTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = JSONResourceTest.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
Expand All @@ -103,6 +107,7 @@
C6C21A3A1F21FD150004A7EB /* DefaultMocks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultMocks.swift; sourceTree = "<group>"; };
C6C395931E04212F00413AD2 /* ModifyRequestNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ModifyRequestNetworkService.swift; sourceTree = "<group>"; };
C6C395951E0422AF00413AD2 /* ModifyRequestNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ModifyRequestNetworkService.swift; sourceTree = "<group>"; };
C6E429711F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSessionDataTask+NetworkTaskRepresenting.swift"; sourceTree = "<group>"; };
C6F235D41D7DA75000E628D8 /* URLSession+NetworkAccessProviding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "URLSession+NetworkAccessProviding.swift"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
C6F7E30E1E49DC4900FA625F /* NetworkTaskMockTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkTaskMockTests.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
Expand Down Expand Up @@ -151,6 +156,7 @@
C6E5A4D11E2FBD1100F966DB /* NetworkService */,
C6E5A4D41E2FBD7700F966DB /* NetworkAccess */,
C6E5A4D01E2FBCF000F966DB /* Resource */,
C6E3AABE1EE7D19000EBDE64 /* Deprecated */,
C6E5A4D21E2FBD2B00F966DB /* NetworkRequest */,
C6E5A4D31E2FBD5800F966DB /* NetworkTask */,
C60BE67F1D6B2C46006B0364 /* HTTPMethod.swift */,
Expand Down Expand Up @@ -197,16 +203,24 @@
name = Helpers;
sourceTree = "<group>";
};
C6E5A4D01E2FBCF000F966DB /* Resource */ = {
C6E3AABE1EE7D19000EBDE64 /* Deprecated */ = {
isa = PBXGroup;
children = (
C60BE67C1D6B2C46006B0364 /* ResourceModeling.swift */,
C60BE6811D6B2C46006B0364 /* JSONResource.swift */,
C60BE6821D6B2C46006B0364 /* JSONArrayResource.swift */,
C65F087A1D757A3C00239CC1 /* JSONMappable.swift */,
C60BE67E1D6B2C46006B0364 /* JSONResourceModeling.swift */,
C60BE67C1D6B2C46006B0364 /* ResourceModeling.swift */,
);
name = Deprecated;
sourceTree = "<group>";
};
C6E5A4D01E2FBCF000F966DB /* Resource */ = {
isa = PBXGroup;
children = (
C60BE6801D6B2C46006B0364 /* Resource.swift */,
C68FF1F41E1A64CB00A2513F /* Ressource+Map.swift */,
C69188661EE6865E00BAD320 /* Resource+Decodable.swift */,
);
name = Resource;
sourceTree = "<group>";
Expand Down Expand Up @@ -235,6 +249,7 @@
C6E5A4D31E2FBD5800F966DB /* NetworkTask */ = {
isa = PBXGroup;
children = (
C6E429711F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift */,
7C40B9FD1D9D66A600620563 /* NetworkTaskMock.swift */,
C60BE6AC1D6B3E81006B0364 /* NetworkTaskRepresenting.swift */,
C6461F041E0167C900E0B081 /* RetryNetworkTask.swift */,
Expand Down Expand Up @@ -267,6 +282,7 @@
isa = PBXGroup;
children = (
C6A5DED31D760CC900BC38B1 /* JSONResourceTest.swift */,
C69188681EE688F700BAD320 /* DecodableResoureTest.swift */,
C604250F1D78002400FD3B38 /* JSONArrayResourceTest.swift */,
C60425121D7803CA00FD3B38 /* ResourceTest.swift */,
);
Expand Down Expand Up @@ -331,16 +347,16 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0730;
LastUpgradeCheck = 0810;
LastUpgradeCheck = 0900;
ORGANIZATIONNAME = DBSystel;
TargetAttributes = {
C60BE65A1D6B2BF3006B0364 = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 0800;
LastSwiftMigration = 0900;
};
C60BE6641D6B2BF3006B0364 = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 0800;
LastSwiftMigration = 0900;
};
};
};
Expand Down Expand Up @@ -405,17 +421,18 @@
C60BE6911D6B2C46006B0364 /* JSONResource.swift in Sources */,
C622A7961E5C7F6500BB3D17 /* URLRequestConvertible.swift in Sources */,
C60BE6901D6B2C46006B0364 /* Resource.swift in Sources */,
C69546B01F45770B006ABCE6 /* URLSessionDataTask+NetworkTaskRepresenting.swift in Sources */,
C60BE6921D6B2C46006B0364 /* JSONArrayResource.swift in Sources */,
C6461F021E01678100E0B081 /* RetryNetworkService.swift in Sources */,
C61E778C1E49D8A900D55BB2 /* NetworkTaskMock.swift in Sources */,
C69188671EE6865E00BAD320 /* Resource+Decodable.swift in Sources */,
7C235E0B1DBF6E8500628DC9 /* NetworkError.swift in Sources */,
C65F087B1D757A3C00239CC1 /* JSONMappable.swift in Sources */,
C6C21A391F21F90A0004A7EB /* NetworkResponseProcessor.swift in Sources */,
C60BE68E1D6B2C46006B0364 /* JSONResourceModeling.swift in Sources */,
C6F235D51D7DA75000E628D8 /* URLSession+NetworkAccessProviding.swift in Sources */,
C60BE68C1D6B2C46006B0364 /* ResourceModeling.swift in Sources */,
C60BE68F1D6B2C46006B0364 /* HTTPMethod.swift in Sources */,
C6E429721F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift in Sources */,
C68FF1F51E1A64CB00A2513F /* Ressource+Map.swift in Sources */,
C604250A1D76F79F00FD3B38 /* NetworkService.swift in Sources */,
C6461F051E0167C900E0B081 /* RetryNetworkTask.swift in Sources */,
Expand All @@ -440,6 +457,7 @@
7C653BC91E09325500199993 /* NetworkResponseProcessorTest.swift in Sources */,
C6461F081E0167FA00E0B081 /* RetryTaskTest.swift in Sources */,
C60425101D78002400FD3B38 /* JSONArrayResourceTest.swift in Sources */,
C691886A1EE6897900BAD320 /* DecodableResoureTest.swift in Sources */,
C60BE6A31D6B3807006B0364 /* NetworkServiceTest.swift in Sources */,
C6C395961E0422AF00413AD2 /* ModifyRequestNetworkService.swift in Sources */,
C6F7E3101E49DCBA00FA625F /* NetworkTaskMockTests.swift in Sources */,
Expand Down Expand Up @@ -470,14 +488,20 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
Expand Down Expand Up @@ -525,14 +549,20 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
Expand Down Expand Up @@ -584,6 +614,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.0;
};
name = Debug;
};
Expand All @@ -605,6 +636,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.dbsystel.DBNetworkStack;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 4.0;
};
name = Release;
};
Expand All @@ -617,6 +649,7 @@
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks @loader_path/../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.dbsystel.DBNetworkStackTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
};
name = Debug;
};
Expand All @@ -629,6 +662,7 @@
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks @loader_path/../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.dbsystel.DBNetworkStackTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
};
name = Release;
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0810"
LastUpgradeVersion = "0900"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>
20 changes: 6 additions & 14 deletions JSONExample.playground/Contents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,17 @@ URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
let networkAccess = URLSession(configuration: .default)
let networkService = NetworkService(networkAccess: networkAccess)

struct IPOrigin {
let ipAdress: String
}

extension IPOrigin: JSONMappable {
init(object: Dictionary<String, Any>) throws {
guard let ipAdress = object["origin"] as? String else {
throw DBNetworkStackError.serializationError(description: "", data: nil)
}
self.ipAdress = ipAdress
}
struct IPOrigin: Decodable {
let origin: String
}

let url: URL! = URL(string: "https://www.httpbin.org")
let request = URLRequest(path: "ip", baseURL: url)
let resource = JSONResource<IPOrigin>(request: request)

let resource = Resource<IPOrigin>(request: request, decoder: JSONDecoder())

networkService.request(resource, onCompletion: { origin in
print(origin)
}, onError: { error in
print(error)
}, onError: { error in
print(error)
})
48 changes: 24 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
| | Main Features |
| --------- | ------------------------------ |
| 🛡 | Typed network resources |
| &#127968; | Protocol oriented architecture |
| &#127968; | Value oriented architecture |
| 🔀 | Exchangeable implementations |
| 🚄 | Extendable API |
| 🎹        | Composable Features           |
Expand Down Expand Up @@ -45,46 +45,46 @@ Request your resource and handle the result
networkService.request(resource, onCompletion: { htmlText in
print(htmlText)
}, onError: { error in
//Handle errors
//Handle errors
})

```

## JSON Mapping Demo
## Loade types conforming to `Decodable`
```swift
struct IPOrigin {
let ipAddress: String
}

extension IPOrigin: JSONMappable {
init(object: Dictionary<String, AnyObject>) throws {
/// Do your mapping
}
struct IPOrigin: Decodable {
let origin: String
}

let url: URL! = URL(string: "https://www.httpbin.org")
let request = URLRequest(path: "ip", baseURL: url)

let url = URL(string: "https://httpbin.org")!
let request = URLRequest(path: "/ip", baseURL: url)
let resource = JSONResource<IPOrigin>(request: request)
let resource = Resource<IPOrigin>(request: request, decoder: JSONDecoder())

networkService.request(resource, onCompletion: { origin in
print(origin)
}, onError: { error in
//Handle errors
//Handle errors
})
```

## Accessing HTTPResponse

Request your resource and handle the result & response. This is similar to just requesting a resulting model.
```swift
networkService.request(resource, onCompletionWithResponse: { htmlText, response in
print(htmlText)
print(response)
}, onError: { error in
//Handle errors
})
extension Resource where Model: XMLDocument {
public init(request: URLRequestConvertible) {
self.init(request: request, parse: { try XMLDocument(data: $0 })
}
}
```

## Extendability
The following example outlines how to extend DBNetworkStack to support the imaginary type `XMLDocument`:

You are now able to call:
```swift
let xmlDocument = Resource<XMLDocument>(request: someRequest)
```

## Protocol oriented architecture / Exchangability
Expand All @@ -95,7 +95,7 @@ The following table shows all the protocols and their default implementations.
| -------------------------------- | ---------------------- |
| ```NetworkAccessProviding``` | ```URLSession``` |
| ```NetworkServiceProviding``` | ```NetworkService``` |
| ```NetworkRequestRepresenting``` | ```NetworkRequest``` |
| ```URLRequestConvertible``` | ```URLRequest``` |
| ```NetworkTaskRepresenting``` | ```URLSessionTask``` |

## Composable Features
Expand All @@ -108,8 +108,8 @@ The following table shows all the protocols and their default implementations.
## Requirements

- iOS 9.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+
- Xcode 8.0+
- Swift 3.0
- Xcode 9.0+
- Swift 3.2/Swift4.0

## Installation

Expand Down
Loading

0 comments on commit 5ba426e

Please sign in to comment.