Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 1fd43b0

Browse files
Merge pull request #66 from wordpress-mobile/issue/10319-site-creation-verticals-service
Exposed new WPCOM service method to retrieve site verticals
2 parents 1490c59 + 93976df commit 1fd43b0

13 files changed

+522
-6
lines changed

Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ PODS:
2727
- OHHTTPStubs/Swift (6.1.0):
2828
- OHHTTPStubs/Default
2929
- UIDeviceIdentifier (0.5.0)
30-
- WordPressKit (1.7.0-beta.2):
30+
- WordPressKit (1.7.0-beta.3):
3131
- Alamofire (~> 4.7.3)
3232
- CocoaLumberjack (= 3.4.2)
3333
- NSObject-SafeExpectations (= 0.0.3)
@@ -70,7 +70,7 @@ SPEC CHECKSUMS:
7070
OCMock: 43565190abc78977ad44a61c0d20d7f0784d35ab
7171
OHHTTPStubs: 1e21c7d2c084b8153fc53d48400d8919d2d432d0
7272
UIDeviceIdentifier: a959a6d4f51036b4180dd31fb26483a820f1cc46
73-
WordPressKit: e2791dc68dcd72bd97043edc06dc0d11acd53728
73+
WordPressKit: 6fb17936573479ebd0e1512e3eec1518f97a5ab5
7474
WordPressShared: f55be10963c8f6dbbc8e896450805ba1dd5353f7
7575
wpxmlrpc: bfc572f62ce7ee897f6f38b098d2ba08732ecef4
7676

WordPressKit.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "WordPressKit"
3-
s.version = "1.7.0-beta.2"
3+
s.version = "1.7.0-beta.3"
44
s.summary = "WordPressKit offers a clean and simple WordPress.com and WordPress.org API."
55

66
s.description = <<-DESC

WordPressKit.xcodeproj/project.pbxproj

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,18 @@
4040
439A44DA2107C93000795ED7 /* RemotePlan_ApiVersion1_3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439A44D92107C93000795ED7 /* RemotePlan_ApiVersion1_3.swift */; };
4141
439A44DC2107CE3C00795ED7 /* site-plans-v3-empty-failure.json in Resources */ = {isa = PBXBuildFile; fileRef = 439A44DB2107CE3C00795ED7 /* site-plans-v3-empty-failure.json */; };
4242
439A44DE2107CF6F00795ED7 /* site-plans-v3-bad-json-failure.json in Resources */ = {isa = PBXBuildFile; fileRef = 439A44DD2107CF6F00795ED7 /* site-plans-v3-bad-json-failure.json */; };
43+
730E869F21E44EFD00753E1A /* WordPressComServiceRemote+SiteVerticals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 730E869E21E44EFD00753E1A /* WordPressComServiceRemote+SiteVerticals.swift */; };
4344
731BA83621DECD61000FDFCD /* SiteCreationRequestEncodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 731BA83521DECD61000FDFCD /* SiteCreationRequestEncodingTests.swift */; };
4445
731BA83821DECD97000FDFCD /* SiteCreationResponseDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 731BA83721DECD97000FDFCD /* SiteCreationResponseDecodingTests.swift */; };
4546
731BA83A21DED358000FDFCD /* site-creation-success.json in Resources */ = {isa = PBXBuildFile; fileRef = 731BA83921DECE93000FDFCD /* site-creation-success.json */; };
4647
7328420421CD786C00126755 /* WordPressComServiceRemote+SiteCreation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7328420321CD786C00126755 /* WordPressComServiceRemote+SiteCreation.swift */; };
4748
7328420621CD798A00126755 /* WordPressComServiceRemoteTests+SiteCreation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7328420521CD798A00126755 /* WordPressComServiceRemoteTests+SiteCreation.swift */; };
49+
73D592FB21E550D300E4CF84 /* site-verticals-multiple.json in Resources */ = {isa = PBXBuildFile; fileRef = 73D592F821E550D200E4CF84 /* site-verticals-multiple.json */; };
50+
73D592FC21E550D300E4CF84 /* site-verticals-single.json in Resources */ = {isa = PBXBuildFile; fileRef = 73D592F921E550D300E4CF84 /* site-verticals-single.json */; };
51+
73D592FD21E550D300E4CF84 /* site-verticals-empty.json in Resources */ = {isa = PBXBuildFile; fileRef = 73D592FA21E550D300E4CF84 /* site-verticals-empty.json */; };
52+
73D5930121E550F500E4CF84 /* SiteVerticalsResponseDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D592FF21E550F500E4CF84 /* SiteVerticalsResponseDecodingTests.swift */; };
53+
73D5930321E552CD00E4CF84 /* SiteVerticalsRequestEncodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D5930221E552CD00E4CF84 /* SiteVerticalsRequestEncodingTests.swift */; };
54+
73D5930521E5541200E4CF84 /* WordPressComServiceRemoteTests+SiteVerticals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D5930421E5541200E4CF84 /* WordPressComServiceRemoteTests+SiteVerticals.swift */; };
4855
7403A2E41EF06ED500DED7DC /* AccountSettingsRemote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7403A2E31EF06ED500DED7DC /* AccountSettingsRemote.swift */; };
4956
7403A2E61EF06F7000DED7DC /* AccountSettingsRemoteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7403A2E51EF06F7000DED7DC /* AccountSettingsRemoteTests.swift */; };
5057
7403A2F41EF06FEB00DED7DC /* me-settings-auth-failure.json in Resources */ = {isa = PBXBuildFile; fileRef = 7403A2E71EF06FEB00DED7DC /* me-settings-auth-failure.json */; };
@@ -484,11 +491,18 @@
484491
439A44DD2107CF6F00795ED7 /* site-plans-v3-bad-json-failure.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "site-plans-v3-bad-json-failure.json"; sourceTree = "<group>"; };
485492
6C2A33D76FD1052D6F30466D /* Pods-WordPressKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WordPressKit.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WordPressKit/Pods-WordPressKit.debug.xcconfig"; sourceTree = "<group>"; };
486493
6F2E0CC4FA01B5475A378DA2 /* Pods-WordPressKitTests.release-alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WordPressKitTests.release-alpha.xcconfig"; path = "Pods/Target Support Files/Pods-WordPressKitTests/Pods-WordPressKitTests.release-alpha.xcconfig"; sourceTree = "<group>"; };
494+
730E869E21E44EFD00753E1A /* WordPressComServiceRemote+SiteVerticals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WordPressComServiceRemote+SiteVerticals.swift"; sourceTree = "<group>"; };
487495
731BA83521DECD61000FDFCD /* SiteCreationRequestEncodingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteCreationRequestEncodingTests.swift; sourceTree = "<group>"; };
488496
731BA83721DECD97000FDFCD /* SiteCreationResponseDecodingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteCreationResponseDecodingTests.swift; sourceTree = "<group>"; };
489497
731BA83921DECE93000FDFCD /* site-creation-success.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "site-creation-success.json"; sourceTree = "<group>"; };
490498
7328420321CD786C00126755 /* WordPressComServiceRemote+SiteCreation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WordPressComServiceRemote+SiteCreation.swift"; sourceTree = "<group>"; };
491499
7328420521CD798A00126755 /* WordPressComServiceRemoteTests+SiteCreation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WordPressComServiceRemoteTests+SiteCreation.swift"; sourceTree = "<group>"; };
500+
73D592F821E550D200E4CF84 /* site-verticals-multiple.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "site-verticals-multiple.json"; sourceTree = "<group>"; };
501+
73D592F921E550D300E4CF84 /* site-verticals-single.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "site-verticals-single.json"; sourceTree = "<group>"; };
502+
73D592FA21E550D300E4CF84 /* site-verticals-empty.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "site-verticals-empty.json"; sourceTree = "<group>"; };
503+
73D592FF21E550F500E4CF84 /* SiteVerticalsResponseDecodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SiteVerticalsResponseDecodingTests.swift; sourceTree = "<group>"; };
504+
73D5930221E552CD00E4CF84 /* SiteVerticalsRequestEncodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SiteVerticalsRequestEncodingTests.swift; sourceTree = "<group>"; };
505+
73D5930421E5541200E4CF84 /* WordPressComServiceRemoteTests+SiteVerticals.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "WordPressComServiceRemoteTests+SiteVerticals.swift"; sourceTree = "<group>"; };
492506
7403A2E31EF06ED500DED7DC /* AccountSettingsRemote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountSettingsRemote.swift; sourceTree = "<group>"; };
493507
7403A2E51EF06F7000DED7DC /* AccountSettingsRemoteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountSettingsRemoteTests.swift; sourceTree = "<group>"; };
494508
7403A2E71EF06FEB00DED7DC /* me-settings-auth-failure.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "me-settings-auth-failure.json"; path = "WordPressKitTests/me-settings-auth-failure.json"; sourceTree = SOURCE_ROOT; };
@@ -999,8 +1013,11 @@
9991013
731BA83521DECD61000FDFCD /* SiteCreationRequestEncodingTests.swift */,
10001014
731BA83721DECD97000FDFCD /* SiteCreationResponseDecodingTests.swift */,
10011015
74C473AE1EF2F7D1009918F2 /* SiteManagementServiceRemoteTests.swift */,
1016+
73D5930221E552CD00E4CF84 /* SiteVerticalsRequestEncodingTests.swift */,
1017+
73D592FF21E550F500E4CF84 /* SiteVerticalsResponseDecodingTests.swift */,
10021018
E1787DB1200E5690004CB3AF /* TimeZoneServiceRemoteTests.swift */,
10031019
7328420521CD798A00126755 /* WordPressComServiceRemoteTests+SiteCreation.swift */,
1020+
73D5930421E5541200E4CF84 /* WordPressComServiceRemoteTests+SiteVerticals.swift */,
10041021
);
10051022
name = Site;
10061023
sourceTree = "<group>";
@@ -1269,6 +1286,7 @@
12691286
93F50A351F226B9300B5BEBA /* WordPressComServiceRemote.h */,
12701287
93F50A361F226B9300B5BEBA /* WordPressComServiceRemote.m */,
12711288
7328420321CD786C00126755 /* WordPressComServiceRemote+SiteCreation.swift */,
1289+
730E869E21E44EFD00753E1A /* WordPressComServiceRemote+SiteVerticals.swift */,
12721290
9368C7A11EC62F800092CE8E /* WPStatsServiceRemote.h */,
12731291
9368C7A21EC62F800092CE8E /* WPStatsServiceRemote.m */,
12741292
E182BF691FD961810001D850 /* Endpoint.swift */,
@@ -1517,6 +1535,9 @@
15171535
74D67F101F15C2D70010C5ED /* site-users-update-role-success.json */,
15181536
74D67F111F15C2D70010C5ED /* site-users-update-role-unknown-site-failure.json */,
15191537
7434E1DD1F17C3C900C40DDB /* site-users-update-role-unknown-user-failure.json */,
1538+
73D592FA21E550D300E4CF84 /* site-verticals-empty.json */,
1539+
73D592F821E550D200E4CF84 /* site-verticals-multiple.json */,
1540+
73D592F921E550D300E4CF84 /* site-verticals-single.json */,
15201541
74D67F2B1F15C3740010C5ED /* site-viewers-delete-auth-failure.json */,
15211542
74D67F2C1F15C3740010C5ED /* site-viewers-delete-bad-json.json */,
15221543
74D67F2D1F15C3740010C5ED /* site-viewers-delete-failure.json */,
@@ -1828,6 +1849,7 @@
18281849
74B335E41F06F6B30053A184 /* WordPressComRestApiMultipleErrors.json in Resources */,
18291850
93AC8ED21ED32FD000900F5A /* stats-v1.1-referrers-day.json in Resources */,
18301851
740B23E61F17FB4200067A2A /* xmlrpc-metaweblog-newpost-invalid-posttype-failure.xml in Resources */,
1852+
73D592FC21E550D300E4CF84 /* site-verticals-single.json in Resources */,
18311853
74D67F2F1F15C3740010C5ED /* site-followers-delete-auth-failure.json in Resources */,
18321854
74C473B51EF320CC009918F2 /* site-delete-bad-json-failure.json in Resources */,
18331855
93AC8EDA1ED32FD000900F5A /* stats-v1.1-video-plays-day.json in Resources */,
@@ -1961,6 +1983,7 @@
19611983
74C473C31EF32DD7009918F2 /* site-export-failure.json in Resources */,
19621984
93AC8ECE1ED32FD000900F5A /* stats-v1.1-latest-post-views.json in Resources */,
19631985
74A44DD81F13C7AC006CD8F4 /* remote-notification.json in Resources */,
1986+
73D592FD21E550D300E4CF84 /* site-verticals-empty.json in Resources */,
19641987
740B23E31F17FB4200067A2A /* xmlrpc-metaweblog-editpost-change-type-failure.xml in Resources */,
19651988
9AEAA775215E774A00876E62 /* site-quick-start-failure.json in Resources */,
19661989
74D67F311F15C3740010C5ED /* site-followers-delete-failure.json in Resources */,
@@ -1985,6 +2008,7 @@
19852008
7403A2FE1EF06FEB00DED7DC /* me-settings-change-web-address-success.json in Resources */,
19862009
93BD27621EE73442002BB00B /* me-sites-success.json in Resources */,
19872010
826016FB1F9FAF6300533B6C /* activity-log-auth-failure.json in Resources */,
2011+
73D592FB21E550D300E4CF84 /* site-verticals-multiple.json in Resources */,
19882012
7403A2F61EF06FEB00DED7DC /* me-settings-change-aboutme-success.json in Resources */,
19892013
7403A2FA1EF06FEB00DED7DC /* me-settings-change-firstname-success.json in Resources */,
19902014
74D67F321F15C3740010C5ED /* site-followers-delete-success.json in Resources */,
@@ -2204,6 +2228,7 @@
22042228
9311A6861F22625A00704AC9 /* RemoteTaxonomyPaging.m in Sources */,
22052229
93BD27821EE73944002BB00B /* WordPressOrgXMLRPCValidator.swift in Sources */,
22062230
40247DFC2120E69600AE1C3C /* AutomatedTransferStatus.swift in Sources */,
2231+
730E869F21E44EFD00753E1A /* WordPressComServiceRemote+SiteVerticals.swift in Sources */,
22072232
740B23C51F17EE8000067A2A /* RemotePost.m in Sources */,
22082233
40247DFA2120D8E100AE1C3C /* AutomatedTransferService.swift in Sources */,
22092234
74E2295B1F1E77290085F7F2 /* KeyringConnection.swift in Sources */,
@@ -2229,6 +2254,7 @@
22292254
9F3E0BAA20873773009CB5BA /* MockServiceRequest.swift in Sources */,
22302255
748437EF1F1D4D8B00E8DDAF /* MenusServiceRemoteTests.m in Sources */,
22312256
93AC8EDF1ED32FD000900F5A /* StatsStreakItemTests.m in Sources */,
2257+
73D5930121E550F500E4CF84 /* SiteVerticalsResponseDecodingTests.swift in Sources */,
22322258
74A44DD41F13C6D8006CD8F4 /* RemoteNotificationTests.swift in Sources */,
22332259
74A923B21F2BE2DF00EC8F92 /* RESTTestable.swift in Sources */,
22342260
74155E251EF87DDF00A06AEA /* ServiceRemoteRESTTests.m in Sources */,
@@ -2259,9 +2285,11 @@
22592285
93BD27411EE73311002BB00B /* AccountServiceRemoteRESTTests.swift in Sources */,
22602286
93F50A441F227CFB00B5BEBA /* UsersServiceRemoteXMLRPCTests.swift in Sources */,
22612287
7430C9BC1F192C0F0051B8E6 /* ReaderSiteServiceRemoteTests.swift in Sources */,
2288+
73D5930321E552CD00E4CF84 /* SiteVerticalsRequestEncodingTests.swift in Sources */,
22622289
930999521F1658F800F006A1 /* ThemeServiceRemoteTests.m in Sources */,
22632290
74B335DA1F06F3D60053A184 /* WordPressComRestApiTests.swift in Sources */,
22642291
7403A2E61EF06F7000DED7DC /* AccountSettingsRemoteTests.swift in Sources */,
2292+
73D5930521E5541200E4CF84 /* WordPressComServiceRemoteTests+SiteVerticals.swift in Sources */,
22652293
17CE77F420C701C8001DEA5A /* ReaderSiteSearchServiceRemoteTests.swift in Sources */,
22662294
93AC8EE11ED32FD000900F5A /* StatsStringUtilitiesTest.m in Sources */,
22672295
74C473AF1EF2F7D1009918F2 /* SiteManagementServiceRemoteTests.swift in Sources */,
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
import Foundation
2+
3+
import WordPressShared
4+
5+
// MARK: - SiteVerticalsRequest
6+
7+
/// Allows the construction of a request for site verticals.
8+
///
9+
/// NB: The default limit (5) applies to the number of results returned by the service. If a search with limit n evinces no exact match, (n - 1) server-unique results are returned.
10+
///
11+
public struct SiteVerticalsRequest: Encodable {
12+
public let search: String
13+
public let limit: Int
14+
15+
public init(search: String, limit: Int = 5) {
16+
self.search = search
17+
self.limit = limit
18+
}
19+
}
20+
21+
// MARK: - SiteVertical(s) : Response
22+
23+
/// Models a Site Vertical
24+
///
25+
public struct SiteVertical: Decodable, Equatable {
26+
public let identifier: String // vertical IDs mix parent/child taxonomy (String)
27+
public let title: String
28+
public let isNew: Bool
29+
30+
public init(identifier: String,
31+
title: String,
32+
isNew: Bool) {
33+
34+
self.identifier = identifier
35+
self.title = title
36+
self.isNew = isNew
37+
}
38+
39+
private enum CodingKeys: String, CodingKey {
40+
case identifier = "vertical_id"
41+
case title = "vertical_name"
42+
case isNew = "is_user_input_vertical"
43+
}
44+
}
45+
46+
// MARK: - WordPressComServiceRemote (Site Verticals)
47+
48+
/// Describes the errors that could arise when searching for site verticals.
49+
///
50+
/// - requestEncodingFailure: unable to encode the request parameters.
51+
/// - responseDecodingFailure: unable to decode the server response.
52+
/// - serviceFailure: the service returned an unexpected error.
53+
///
54+
public enum SiteVerticalsError: Error {
55+
case requestEncodingFailure
56+
case responseDecodingFailure
57+
case serviceFailure
58+
}
59+
60+
/// Advises the caller of results related to requests for site verticals.
61+
///
62+
/// - success: the site verticals request succeeded with the accompanying result.
63+
/// - failure: the site verticals request failed due to the accompanying error.
64+
///
65+
public enum SiteVerticalsResult {
66+
case success([SiteVertical])
67+
case failure(SiteVerticalsError)
68+
}
69+
70+
public typealias SiteVerticalsServiceCompletion = ((SiteVerticalsResult) -> ())
71+
72+
/// Site verticals services, exclusive to WordPress.com.
73+
///
74+
public extension WordPressComServiceRemote {
75+
76+
/// Retrieves Verticals matching the specified criteria.
77+
///
78+
/// - Parameters:
79+
/// - request: the value object with which to compose the request.
80+
/// - completion: a closure including the result of the request for site verticals.
81+
///
82+
func retrieveVerticals(request: SiteVerticalsRequest, completion: @escaping SiteVerticalsServiceCompletion) {
83+
84+
let endpoint = "verticals"
85+
let path = self.path(forEndpoint: endpoint, withVersion: ._2_0)
86+
87+
var requestParameters: [String : AnyObject]
88+
do {
89+
requestParameters = try encodeRequestParameters(request: request)
90+
} catch {
91+
DDLogError("Failed to encode \(SiteCreationRequest.self) : \(error)")
92+
93+
completion(.failure(SiteVerticalsError.requestEncodingFailure))
94+
return
95+
}
96+
97+
let locale = WordPressComLanguageDatabase().deviceLanguage.slug
98+
requestParameters["locale"] = locale as AnyObject
99+
100+
wordPressComRestApi.GET(
101+
path,
102+
parameters: requestParameters,
103+
success: { [weak self] responseObject, httpResponse in
104+
DDLogInfo("\(responseObject) | \(String(describing: httpResponse))")
105+
106+
guard let self = self else {
107+
return
108+
}
109+
110+
do {
111+
let response = try self.decodeResponse(responseObject: responseObject)
112+
completion(.success(response))
113+
} catch {
114+
DDLogError("Failed to decode \([SiteVertical].self) : \(error.localizedDescription)")
115+
completion(.failure(SiteVerticalsError.responseDecodingFailure))
116+
}
117+
},
118+
failure: { error, httpResponse in
119+
DDLogError("\(error) | \(String(describing: httpResponse))")
120+
completion(.failure(SiteVerticalsError.serviceFailure))
121+
})
122+
}
123+
}
124+
125+
// MARK: - Serialization support
126+
127+
private extension WordPressComServiceRemote {
128+
129+
func encodeRequestParameters(request: SiteVerticalsRequest) throws -> [String : AnyObject] {
130+
131+
let encoder = JSONEncoder()
132+
133+
let jsonData = try encoder.encode(request)
134+
let serializedJSON = try JSONSerialization.jsonObject(with: jsonData, options: [])
135+
136+
let requestParameters: [String : AnyObject]
137+
if let jsonDictionary = serializedJSON as? [String : AnyObject] {
138+
requestParameters = jsonDictionary
139+
} else {
140+
requestParameters = [:]
141+
}
142+
143+
return requestParameters
144+
}
145+
146+
func decodeResponse(responseObject: AnyObject) throws -> [SiteVertical] {
147+
148+
let decoder = JSONDecoder()
149+
150+
let data = try JSONSerialization.data(withJSONObject: responseObject, options: [])
151+
let response = try decoder.decode([SiteVertical].self, from: data)
152+
153+
return response
154+
}
155+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

0 commit comments

Comments
 (0)