Skip to content

Commit 5b72613

Browse files
refactor: Refactor MPUserAttributeChange to Swift (#317)
* refactor: Refactor MPUserAttributeChange to Swift * Simplify logic on Zoom pairing session with Brandon --------- Co-authored-by: Ben Baron <[email protected]>
1 parent 3521f0a commit 5b72613

File tree

9 files changed

+59
-96
lines changed

9 files changed

+59
-96
lines changed

UnitTests/MPMessageBuilderTests.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#import <XCTest/XCTest.h>
22
#import <OCMock/OCMock.h>
33
#import "MPMessageBuilder.h"
4+
#import "mParticle.h"
45
#import "MPIConstants.h"
56
#import "MPSession.h"
67
#import "MPMessage.h"
@@ -13,9 +14,8 @@
1314
#import "MPCommerceEvent.h"
1415
#import "MPCommerceEvent+Dictionary.h"
1516
#import "NSDictionary+MPCaseInsensitive.h"
16-
#import "MPUserAttributeChange.h"
17+
#import "MParticleSwift.h"
1718
#import "MPPersistenceController.h"
18-
#import "mParticle.h"
1919
#import "MPBaseTestCase.h"
2020
#import "MPStateMachine.h"
2121
#import "MParticleReachability.h"

UnitTests/MPUserAttributeChangeTests.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#import <XCTest/XCTest.h>
2-
#import "MPUserAttributeChange.h"
2+
#import "MParticleSwift.h"
33
#import "MPBaseTestCase.h"
44

55
@interface MPUserAttributeChangeTests : MPBaseTestCase
@@ -34,7 +34,7 @@ - (void)testInstance {
3434
XCTAssertNil(userAttributeChange.timestamp);
3535
XCTAssertEqualObjects(userAttributeChange.userAttributes, userAttributes);
3636
XCTAssertNil(userAttributeChange.value);
37-
XCTAssertEqualObjects(userAttributeChange.valueToLog, [NSNull null]);
37+
XCTAssertNil(userAttributeChange.valueToLog);
3838
XCTAssertTrue(userAttributeChange.changed);
3939
XCTAssertTrue(userAttributeChange.deleted);
4040
XCTAssertTrue(userAttributeChange.isArray);

mParticle-Apple-SDK.xcodeproj/project.pbxproj

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
531BCF372B28A23400F5C573 /* MPIdentityCaching.m in Sources */ = {isa = PBXBuildFile; fileRef = 531BCF332B28A23400F5C573 /* MPIdentityCaching.m */; };
2020
531BCF3A2B28A83E00F5C573 /* MPIdentityCachingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 531BCF392B28A83E00F5C573 /* MPIdentityCachingTests.m */; };
2121
531BCF3B2B28A83E00F5C573 /* MPIdentityCachingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 531BCF392B28A83E00F5C573 /* MPIdentityCachingTests.m */; };
22+
534C11B62D08F53D00466F71 /* MPUserAttributeChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 534C11B52D08F53D00466F71 /* MPUserAttributeChange.swift */; };
23+
534C11B72D08F53D00466F71 /* MPUserAttributeChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 534C11B52D08F53D00466F71 /* MPUserAttributeChange.swift */; };
2224
534CD25C29CE2877008452B3 /* NSNumber+MPFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2629CDFB1F00E7489F /* NSNumber+MPFormatter.swift */; };
2325
534CD25E29CE2BF1008452B3 /* MParticleSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 534CD25D29CE2BF1008452B3 /* MParticleSwift.h */; };
2426
534CD25F29CE2BF1008452B3 /* MParticleSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 534CD25D29CE2BF1008452B3 /* MParticleSwift.h */; };
@@ -160,14 +162,12 @@
160162
53A79BDA29CDFB2000E7489F /* MPDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B1529CDFB1F00E7489F /* MPDevice.m */; };
161163
53A79BDB29CDFB2000E7489F /* MParticleWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1629CDFB1F00E7489F /* MParticleWebView.h */; };
162164
53A79BDC29CDFB2000E7489F /* MPLaunchInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1729CDFB1F00E7489F /* MPLaunchInfo.h */; };
163-
53A79BDE29CDFB2000E7489F /* MPUserAttributeChange.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1929CDFB1F00E7489F /* MPUserAttributeChange.h */; };
164165
53A79BDF29CDFB2000E7489F /* MPMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1A29CDFB1F00E7489F /* MPMessageBuilder.h */; };
165166
53A79BE229CDFB2000E7489F /* MPIUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B1D29CDFB1F00E7489F /* MPIUserDefaults.m */; };
166167
53A79BE329CDFB2000E7489F /* MPBracket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B1E29CDFB1F00E7489F /* MPBracket.cpp */; };
167168
53A79BE829CDFB2000E7489F /* MPUploadBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2329CDFB1F00E7489F /* MPUploadBuilder.h */; };
168169
53A79BE929CDFB2000E7489F /* MPApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2429CDFB1F00E7489F /* MPApplication.h */; settings = {ATTRIBUTES = (Public, ); }; };
169170
53A79BEB29CDFB2000E7489F /* NSNumber+MPFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2629CDFB1F00E7489F /* NSNumber+MPFormatter.swift */; };
170-
53A79BEC29CDFB2000E7489F /* MPUserAttributeChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2729CDFB1F00E7489F /* MPUserAttributeChange.m */; };
171171
53A79BEE29CDFB2000E7489F /* MPLaunchInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2929CDFB1F00E7489F /* MPLaunchInfo.m */; };
172172
53A79BEF29CDFB2000E7489F /* MParticleWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2A29CDFB1F00E7489F /* MParticleWebView.m */; };
173173
53A79BF029CDFB2000E7489F /* MPDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2B29CDFB1F00E7489F /* MPDevice.h */; };
@@ -382,7 +382,6 @@
382382
53A79D5129CE23F700E7489F /* MParticleReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B0029CDFB1F00E7489F /* MParticleReachability.h */; };
383383
53A79D5329CE23F700E7489F /* MPCustomModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B3029CDFB1F00E7489F /* MPCustomModule.h */; };
384384
53A79D5529CE23F700E7489F /* MPPersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79ABB29CDFB1E00E7489F /* MPPersistenceController.h */; };
385-
53A79D5729CE23F700E7489F /* MPUserAttributeChange.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1929CDFB1F00E7489F /* MPUserAttributeChange.h */; };
386385
53A79D5829CE23F700E7489F /* MPIdentityDTO.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA029CDFB1E00E7489F /* MPIdentityDTO.h */; };
387386
53A79D5929CE23F700E7489F /* MPMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1A29CDFB1F00E7489F /* MPMessageBuilder.h */; };
388387
53A79D5A29CE23F700E7489F /* MPURLRequestBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA829CDFB1E00E7489F /* MPURLRequestBuilder.h */; };
@@ -466,7 +465,6 @@
466465
53A79DB929CE23F700E7489F /* MPKitContainer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B5029CDFB1F00E7489F /* MPKitContainer.mm */; };
467466
53A79DBA29CE23F700E7489F /* MPUploadBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B1229CDFB1F00E7489F /* MPUploadBuilder.m */; };
468467
53A79DBC29CE23F700E7489F /* MPBaseProjection.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B5329CDFB1F00E7489F /* MPBaseProjection.m */; };
469-
53A79DBE29CE23F700E7489F /* MPUserAttributeChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2729CDFB1F00E7489F /* MPUserAttributeChange.m */; };
470468
53A79DBF29CE23F700E7489F /* MPIdentityApiManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AA229CDFB1E00E7489F /* MPIdentityApiManager.m */; };
471469
53B28FB22C938C26009072FC /* MPLocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53B28FB12C938C26009072FC /* MPLocationManager.swift */; };
472470
53B28FB32C938C26009072FC /* MPLocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53B28FB12C938C26009072FC /* MPLocationManager.swift */; };
@@ -529,6 +527,7 @@
529527
531BCF322B28A23400F5C573 /* MPIdentityCaching.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPIdentityCaching.h; sourceTree = "<group>"; };
530528
531BCF332B28A23400F5C573 /* MPIdentityCaching.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPIdentityCaching.m; sourceTree = "<group>"; };
531529
531BCF392B28A83E00F5C573 /* MPIdentityCachingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPIdentityCachingTests.m; sourceTree = "<group>"; };
530+
534C11B52D08F53D00466F71 /* MPUserAttributeChange.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPUserAttributeChange.swift; sourceTree = "<group>"; };
532531
534CD25D29CE2BF1008452B3 /* MParticleSwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MParticleSwift.h; sourceTree = "<group>"; };
533532
534CD2AA29CE2CE1008452B3 /* mParticle-Apple-SDK-NoLocationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "mParticle-Apple-SDK-NoLocationTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
534533
5399DDB72CA727E1006526E1 /* MPZip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPZip.swift; sourceTree = "<group>"; };
@@ -603,14 +602,12 @@
603602
53A79B1529CDFB1F00E7489F /* MPDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDevice.m; sourceTree = "<group>"; };
604603
53A79B1629CDFB1F00E7489F /* MParticleWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MParticleWebView.h; sourceTree = "<group>"; };
605604
53A79B1729CDFB1F00E7489F /* MPLaunchInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLaunchInfo.h; sourceTree = "<group>"; };
606-
53A79B1929CDFB1F00E7489F /* MPUserAttributeChange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUserAttributeChange.h; sourceTree = "<group>"; };
607605
53A79B1A29CDFB1F00E7489F /* MPMessageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMessageBuilder.h; sourceTree = "<group>"; };
608606
53A79B1D29CDFB1F00E7489F /* MPIUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPIUserDefaults.m; sourceTree = "<group>"; };
609607
53A79B1E29CDFB1F00E7489F /* MPBracket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MPBracket.cpp; sourceTree = "<group>"; };
610608
53A79B2329CDFB1F00E7489F /* MPUploadBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUploadBuilder.h; sourceTree = "<group>"; };
611609
53A79B2429CDFB1F00E7489F /* MPApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPApplication.h; sourceTree = "<group>"; };
612610
53A79B2629CDFB1F00E7489F /* NSNumber+MPFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSNumber+MPFormatter.swift"; sourceTree = "<group>"; };
613-
53A79B2729CDFB1F00E7489F /* MPUserAttributeChange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUserAttributeChange.m; sourceTree = "<group>"; };
614611
53A79B2929CDFB1F00E7489F /* MPLaunchInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLaunchInfo.m; sourceTree = "<group>"; };
615612
53A79B2A29CDFB1F00E7489F /* MParticleWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MParticleWebView.m; sourceTree = "<group>"; };
616613
53A79B2B29CDFB1F00E7489F /* MPDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDevice.h; sourceTree = "<group>"; };
@@ -1016,18 +1013,17 @@
10161013
53A79B1529CDFB1F00E7489F /* MPDevice.m */,
10171014
53A79B1629CDFB1F00E7489F /* MParticleWebView.h */,
10181015
53A79B1729CDFB1F00E7489F /* MPLaunchInfo.h */,
1019-
53A79B1929CDFB1F00E7489F /* MPUserAttributeChange.h */,
10201016
53A79B1A29CDFB1F00E7489F /* MPMessageBuilder.h */,
10211017
53A79B1D29CDFB1F00E7489F /* MPIUserDefaults.m */,
10221018
53A79B1E29CDFB1F00E7489F /* MPBracket.cpp */,
10231019
53A79B2329CDFB1F00E7489F /* MPUploadBuilder.h */,
10241020
53A79B2629CDFB1F00E7489F /* NSNumber+MPFormatter.swift */,
1025-
53A79B2729CDFB1F00E7489F /* MPUserAttributeChange.m */,
10261021
53A79B2929CDFB1F00E7489F /* MPLaunchInfo.m */,
10271022
53A79B2A29CDFB1F00E7489F /* MParticleWebView.m */,
10281023
53A79B2B29CDFB1F00E7489F /* MPDevice.h */,
10291024
53A79B2C29CDFB1F00E7489F /* MPBracket.h */,
10301025
53FDD1BC2AE871AF003D5FA1 /* MPIHasher.swift */,
1026+
534C11B52D08F53D00466F71 /* MPUserAttributeChange.swift */,
10311027
);
10321028
path = Utils;
10331029
sourceTree = "<group>";
@@ -1365,7 +1361,6 @@
13651361
53A79BC629CDFB2000E7489F /* MParticleReachability.h in Headers */,
13661362
53A79BF429CDFB2000E7489F /* MPCustomModule.h in Headers */,
13671363
53A79B8629CDFB2000E7489F /* MPPersistenceController.h in Headers */,
1368-
53A79BDE29CDFB2000E7489F /* MPUserAttributeChange.h in Headers */,
13691364
53A79B6E29CDFB2000E7489F /* MPIdentityDTO.h in Headers */,
13701365
53A79BDF29CDFB2000E7489F /* MPMessageBuilder.h in Headers */,
13711366
53A79B7429CDFB2000E7489F /* MPURLRequestBuilder.h in Headers */,
@@ -1458,7 +1453,6 @@
14581453
53A79D5129CE23F700E7489F /* MParticleReachability.h in Headers */,
14591454
53A79D5329CE23F700E7489F /* MPCustomModule.h in Headers */,
14601455
53A79D5529CE23F700E7489F /* MPPersistenceController.h in Headers */,
1461-
53A79D5729CE23F700E7489F /* MPUserAttributeChange.h in Headers */,
14621456
53A79D5829CE23F700E7489F /* MPIdentityDTO.h in Headers */,
14631457
53A79D5929CE23F700E7489F /* MPMessageBuilder.h in Headers */,
14641458
53A79D5A29CE23F700E7489F /* MPURLRequestBuilder.h in Headers */,
@@ -1777,6 +1771,7 @@
17771771
53A79BF829CDFB2000E7489F /* MPNotificationController.m in Sources */,
17781772
53A79C0829CDFB2100E7489F /* MPEvent.m in Sources */,
17791773
53A79B6729CDFB2000E7489F /* MPAliasResponse.m in Sources */,
1774+
534C11B72D08F53D00466F71 /* MPUserAttributeChange.swift in Sources */,
17801775
53A79C1229CDFB2100E7489F /* MPKitFilter.m in Sources */,
17811776
53A79B7829CDFB2000E7489F /* MPURLConnectionAssociate.m in Sources */,
17821777
53A79C0529CDFB2100E7489F /* MPTransactionAttributes.m in Sources */,
@@ -1791,7 +1786,6 @@
17911786
53A79C0E29CDFB2100E7489F /* MPKitContainer.mm in Sources */,
17921787
53A79BD729CDFB2000E7489F /* MPUploadBuilder.m in Sources */,
17931788
53A79C1129CDFB2100E7489F /* MPBaseProjection.m in Sources */,
1794-
53A79BEC29CDFB2000E7489F /* MPUserAttributeChange.m in Sources */,
17951789
53A79B7029CDFB2000E7489F /* MPIdentityApiManager.m in Sources */,
17961790
);
17971791
runOnlyForDeploymentPostprocessing = 0;
@@ -1947,6 +1941,7 @@
19471941
53A79DA929CE23F700E7489F /* MPAppNotificationHandler.m in Sources */,
19481942
53A79DAA29CE23F700E7489F /* MPNotificationController.m in Sources */,
19491943
53A79DAB29CE23F700E7489F /* MPEvent.m in Sources */,
1944+
534C11B62D08F53D00466F71 /* MPUserAttributeChange.swift in Sources */,
19501945
53A79DAD29CE23F700E7489F /* MPAliasResponse.m in Sources */,
19511946
53A79DAE29CE23F700E7489F /* MPKitFilter.m in Sources */,
19521947
53A79DAF29CE23F700E7489F /* MPURLConnectionAssociate.m in Sources */,
@@ -1961,7 +1956,6 @@
19611956
53A79DB929CE23F700E7489F /* MPKitContainer.mm in Sources */,
19621957
53A79DBA29CE23F700E7489F /* MPUploadBuilder.m in Sources */,
19631958
53A79DBC29CE23F700E7489F /* MPBaseProjection.m in Sources */,
1964-
53A79DBE29CE23F700E7489F /* MPUserAttributeChange.m in Sources */,
19651959
53A79DBF29CE23F700E7489F /* MPIdentityApiManager.m in Sources */,
19661960
);
19671961
runOnlyForDeploymentPostprocessing = 0;

mParticle-Apple-SDK/Include/mParticle.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
NS_ASSUME_NONNULL_BEGIN
4141

4242
@class MPSideloadedKit;
43+
@class MPKitContainer;
4344

4445
/**
4546
An SDK session.

mParticle-Apple-SDK/MPBackendController.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#import "MPCommerceEvent.h"
2222
#import "MPCommerceEvent+Dictionary.h"
2323
#import "MPKitContainer.h"
24-
#import "MPUserAttributeChange.h"
2524
#import "MPURLRequestBuilder.h"
2625
#import "MPListenerController.h"
2726
#import "MParticleWebView.h"

mParticle-Apple-SDK/Utils/MPMessageBuilder.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#import "MPCommerceEvent+Dictionary.h"
99
#import "MPILogger.h"
1010
#import "NSDictionary+MPCaseInsensitive.h"
11-
#import "MPUserAttributeChange.h"
1211
#import "MPPersistenceController.h"
1312
#import "MPApplication.h"
1413
#import "mParticle.h"

mParticle-Apple-SDK/Utils/MPUserAttributeChange.h

Lines changed: 0 additions & 16 deletions
This file was deleted.

mParticle-Apple-SDK/Utils/MPUserAttributeChange.m

Lines changed: 0 additions & 62 deletions
This file was deleted.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
//
2+
// MPUserAttributeChange.swift
3+
// mParticle-Apple-SDK
4+
//
5+
// Created by Brandon Stalnaker on 12/9/24.
6+
//
7+
8+
import Foundation
9+
10+
@objc public class MPUserAttributeChange : NSObject {
11+
12+
@objc public var key: String
13+
@objc public var timestamp: Date?
14+
@objc public var userAttributes: [String : Any]?
15+
@objc public var value: Any?
16+
@objc public var valueToLog: Any?
17+
@objc public private(set) var changed: Bool
18+
@objc public var deleted: Bool
19+
@objc public var isArray: Bool
20+
21+
@objc public init?(userAttributes: [String : Any]? = nil, key: String, value: Any?) {
22+
guard value == nil || value is [Any] || value is NSNull || value is String || value is NSNumber else {
23+
return nil
24+
}
25+
26+
if userAttributes == nil && value == nil {
27+
return nil
28+
}
29+
30+
self.key = key
31+
self.value = value
32+
self.deleted = false
33+
self.valueToLog = value
34+
self.userAttributes = userAttributes
35+
36+
let existingValue = userAttributes?[key]
37+
self.isArray = (value is [Any] || existingValue is [Any])
38+
self.changed = !equals(existingValue, value)
39+
super.init()
40+
}
41+
}
42+
43+
fileprivate func equals(_ x : Any?, _ y : Any?) -> Bool {
44+
guard let x = x as? AnyHashable, let y = y as? AnyHashable else {
45+
return false
46+
}
47+
return x == y
48+
}

0 commit comments

Comments
 (0)