Skip to content

Commit 00d5420

Browse files
authored
Merge pull request #256 from RomanPodymov/master
@dynamicMemberLookup for BackendlessUser
2 parents 7a1f259 + 4bdd3f5 commit 00d5420

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

Sources/SwiftSDK/UserService/BackendlessUser.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import Foundation
2323

24+
@dynamicMemberLookup
2425
@objcMembers public class BackendlessUser: NSObject, Codable {
2526

2627
public var objectId: String?
@@ -39,6 +40,16 @@ import Foundation
3940

4041
public private(set) var userToken: String?
4142

43+
public subscript(dynamicMember property: String) -> Any? {
44+
get {
45+
properties[property]
46+
}
47+
48+
set {
49+
properties[property] = newValue
50+
}
51+
}
52+
4253
var userProperties = JSON()
4354
public var properties: [String : Any] {
4455
get {

Tests/SwiftSDKTests/UserServiceTests/BackendlessUserTests.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,37 @@ class BackendlessUserTests: XCTestCase {
8989
XCTAssertTrue(user.properties["city"] is NSNull)
9090
}
9191

92+
func test10AddPropertyWithDynamicMemberLookup() {
93+
let user = createBackendlessUser()
94+
user.foo = "bar"
95+
XCTAssertNotNil(user.properties["foo"])
96+
XCTAssertFalse(user.properties["foo"] is NSNull)
97+
}
98+
99+
func test11AddPropertiesWithDynamicMemberLookup() {
100+
let user = createBackendlessUser()
101+
user.foo = "bar"
102+
user.foo1 = "bar1"
103+
XCTAssertNotNil(user.properties["foo"])
104+
XCTAssertNotNil(user.properties["foo1"])
105+
XCTAssertFalse(user.properties["foo"] is NSNull)
106+
XCTAssertFalse(user.properties["foo1"] is NSNull)
107+
}
108+
109+
func test12UpdatePropertyWithDynamicMemberLookup() {
110+
let user = createBackendlessUser()
111+
user.age = 55
112+
XCTAssertEqual(user.properties["age"] as? Int, 55)
113+
}
114+
115+
func test13UpdatePropertiesWithDynamicMemberLookup() {
116+
let user = createBackendlessUser()
117+
user.name = "Bob"
118+
user.age = 55
119+
XCTAssertEqual(user.properties["name"] as? String, "Bob")
120+
XCTAssertEqual(user.properties["age"] as? Int, 55)
121+
}
122+
92123
// ********************************************************************************
93124

94125
private func createBackendlessUser() -> BackendlessUser {

0 commit comments

Comments
 (0)