Skip to content

Commit

Permalink
Remove optional chaining from traversal operations, with help from #4
Browse files Browse the repository at this point in the history
  • Loading branch information
saoudrizwan committed Jan 6, 2019
1 parent 90c40ea commit 81ab869
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 19 deletions.
24 changes: 13 additions & 11 deletions Sources/DynamicJSON.swift
Expand Up @@ -21,25 +21,27 @@ public enum JSON {

// MARK: Dynamic Member Lookup

public subscript(index: Int) -> JSON? {
if case .array(let arr) = self {
return index < arr.count ? arr[index] : nil
public subscript(dynamicMember member: String) -> JSON {
if case .dictionary(let dict) = self {
return dict[member] ?? .null
}
return nil
return .null
}

public subscript(key: String) -> JSON? {
if case .dictionary(let dict) = self {
return dict[key]
// MARK: Subscript

public subscript(index: Int) -> JSON {
if case .array(let arr) = self {
return index < arr.count ? arr[index] : .null
}
return nil
return .null
}

public subscript(dynamicMember member: String) -> JSON? {
public subscript(key: String) -> JSON {
if case .dictionary(let dict) = self {
return dict[member]
return dict[key] ?? .null
}
return nil
return .null
}

// MARK: Initializers
Expand Down
16 changes: 8 additions & 8 deletions Tests/DynamicJSONTests.swift
Expand Up @@ -35,10 +35,10 @@ class DynamicJSONTests: XCTestCase {
func test_data_initializer() {
let usersData = loadMockUsersData()
let json = JSON(usersData)
XCTAssert(json[0]?.id?.int == 1)
XCTAssert(json[0]?.username?.string == "Bret")
XCTAssert(json[0]?.address?.street?.string == "Kulas Light")
XCTAssert(json[0]?.address?.geo?.lat?.double == -37.3159)
XCTAssert(json[0].id.int == 1)
XCTAssert(json[0].username.string == "Bret")
XCTAssert(json[0].address.street.string == "Kulas Light")
XCTAssert(json[0].address.geo.lat.double == -37.3159)
}

func test_convert_json_to_data_and_compare() {
Expand Down Expand Up @@ -174,10 +174,10 @@ class DynamicJSONTests: XCTestCase {
func test_string_subscript_accessor() {
let usersData = loadMockUsersData()
let json = JSON(usersData)
XCTAssert(json[0]?["id"]?.int == 1)
XCTAssert(json[0]?["username"]?.string == "Bret")
XCTAssert(json[0]?.address?["street"]?.string == "Kulas Light")
XCTAssert(json[0]?.address?["geo"]?.lat?.double == -37.3159)
XCTAssert(json[0]["id"].int == 1)
XCTAssert(json[0]["username"].string == "Bret")
XCTAssert(json[0].address["street"].string == "Kulas Light")
XCTAssert(json[0].address["geo"].lat.double == -37.3159)
}

// MARK: Helpers
Expand Down

0 comments on commit 81ab869

Please sign in to comment.