Skip to content

Commit 6a7cc93

Browse files
authored
Merge pull request #878 from naithar/guard-in-equal
2 parents 24967b1 + 8d4cc9f commit 6a7cc93

23 files changed

+161
-244
lines changed

Foundation/Bridging.swift

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -121,20 +121,18 @@ internal final class _SwiftValue : NSObject, NSCopying {
121121
}
122122

123123
override func isEqual(_ value: Any?) -> Bool {
124-
if let other = value as? _SwiftValue {
125-
if self === other {
126-
return true
127-
}
128-
if let otherHashable = other.value as? AnyHashable,
129-
let hashable = self.value as? AnyHashable {
130-
return otherHashable == hashable
131-
}
124+
switch value {
125+
case let other as _SwiftValue:
126+
guard let left = other.value as? AnyHashable,
127+
let right = self.value as? AnyHashable else { return self === other }
132128

133-
} else if let otherHashable = value as? AnyHashable,
134-
let hashable = self.value as? AnyHashable {
135-
return otherHashable == hashable
129+
return left == right
130+
case let other as AnyHashable:
131+
guard let hashable = self.value as? AnyHashable else { return false }
132+
return other == hashable
133+
default:
134+
return false
136135
}
137-
return false
138136
}
139137

140138
public func copy(with zone: NSZone?) -> Any {

Foundation/NSAffineTransform.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -334,12 +334,9 @@ open class NSAffineTransform : NSObject, NSCopying, NSSecureCoding {
334334
}
335335

336336
open override func isEqual(_ object: Any?) -> Bool {
337-
if let other = object as? NSAffineTransform {
338-
return other === self
339-
|| (other.transformStruct == self.transformStruct)
340-
}
341-
342-
return false
337+
guard let other = object as? NSAffineTransform else { return false }
338+
return other === self
339+
|| (other.transformStruct == self.transformStruct)
343340
}
344341

345342
public static var supportsSecureCoding: Bool {

Foundation/NSArray.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,14 @@ open class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCo
137137
}
138138

139139
open override func isEqual(_ value: Any?) -> Bool {
140-
if let other = value as? [Any] {
140+
switch value {
141+
case let other as [Any]:
141142
return self.isEqual(to: other)
142-
} else if let other = value as? NSArray {
143+
case let other as NSArray:
143144
return self.isEqual(to: other.allObjects)
145+
default:
146+
return false
144147
}
145-
return false
146148
}
147149

148150
open override var hash: Int {

Foundation/NSCalendar.swift

Lines changed: 27 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -225,15 +225,14 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding {
225225
}
226226

227227
open override func isEqual(_ value: Any?) -> Bool {
228-
if let cal = value as? Calendar {
229-
return CFEqual(_cfObject, cal._cfObject)
230-
} else if let cal = value as? NSCalendar {
231-
if cal === self {
232-
return true
233-
}
234-
return CFEqual(_cfObject, cal._cfObject)
228+
switch value {
229+
case let other as Calendar:
230+
return CFEqual(_cfObject, other._cfObject)
231+
case let other as NSCalendar:
232+
return other === self || CFEqual(_cfObject, other._cfObject)
233+
default:
234+
return false
235235
}
236-
return false
237236
}
238237

239238
open override var description: String {
@@ -1314,61 +1313,26 @@ open class NSDateComponents : NSObject, NSCopying, NSSecureCoding {
13141313
}
13151314

13161315
open override func isEqual(_ object: Any?) -> Bool {
1317-
if let other = object as? NSDateComponents {
1318-
if era != other.era {
1319-
return false
1320-
}
1321-
if year != other.year {
1322-
return false
1323-
}
1324-
if quarter != other.quarter {
1325-
return false
1326-
}
1327-
if month != other.month {
1328-
return false
1329-
}
1330-
if day != other.day {
1331-
return false
1332-
}
1333-
if hour != other.hour {
1334-
return false
1335-
}
1336-
if minute != other.minute {
1337-
return false
1338-
}
1339-
if second != other.second {
1340-
return false
1341-
}
1342-
if nanosecond != other.nanosecond {
1343-
return false
1344-
}
1345-
if weekOfYear != other.weekOfYear {
1346-
return false
1347-
}
1348-
if weekOfMonth != other.weekOfMonth {
1349-
return false
1350-
}
1351-
if yearForWeekOfYear != other.yearForWeekOfYear {
1352-
return false
1353-
}
1354-
if weekday != other.weekday {
1355-
return false
1356-
}
1357-
if weekdayOrdinal != other.weekdayOrdinal {
1358-
return false
1359-
}
1360-
if isLeapMonth != other.isLeapMonth {
1361-
return false
1362-
}
1363-
if calendar != other.calendar {
1364-
return false
1365-
}
1366-
if timeZone != other.timeZone {
1367-
return false
1368-
}
1369-
return true
1370-
}
1371-
return false
1316+
guard let other = object as? NSDateComponents else { return false }
1317+
1318+
return self === other
1319+
|| (era == other.era
1320+
&& year == other.year
1321+
&& quarter == other.quarter
1322+
&& month == other.month
1323+
&& day == other.day
1324+
&& hour == other.hour
1325+
&& minute == other.minute
1326+
&& second == other.second
1327+
&& nanosecond == other.nanosecond
1328+
&& weekOfYear == other.weekOfYear
1329+
&& weekOfMonth == other.weekOfMonth
1330+
&& yearForWeekOfYear == other.yearForWeekOfYear
1331+
&& weekday == other.weekday
1332+
&& weekdayOrdinal == other.weekdayOrdinal
1333+
&& isLeapMonth == other.isLeapMonth
1334+
&& calendar == other.calendar
1335+
&& timeZone == other.timeZone)
13721336
}
13731337

13741338
public convenience required init?(coder aDecoder: NSCoder) {

Foundation/NSCharacterSet.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,14 @@ open class NSCharacterSet : NSObject, NSCopying, NSMutableCopying, NSCoding {
5050
}
5151

5252
open override func isEqual(_ value: Any?) -> Bool {
53-
if let cs = value as? CharacterSet {
54-
return CFEqual(_cfObject, cs._cfObject)
55-
} else if let cs = value as? NSCharacterSet {
56-
return CFEqual(_cfObject, cs._cfObject)
53+
switch value {
54+
case let other as CharacterSet:
55+
return CFEqual(_cfObject, other._cfObject)
56+
case let other as NSCharacterSet:
57+
return CFEqual(_cfObject, other._cfObject)
58+
default:
59+
return false
5760
}
58-
return false
5961
}
6062

6163
open override var description: String {

Foundation/NSConcreteValue.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,8 @@ internal class NSConcreteValue : NSValue {
167167
}
168168

169169
override func isEqual(_ value: Any?) -> Bool {
170-
if let other = value as? NSConcreteValue {
171-
return self._typeInfo == other._typeInfo &&
172-
self._isEqualToValue(other)
173-
} else {
174-
return false
175-
}
170+
guard let other = value as? NSConcreteValue else { return false }
171+
return self._typeInfo == other._typeInfo && self._isEqualToValue(other)
176172
}
177173

178174
override var hash: Int {

Foundation/NSDate.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@ open class NSDate : NSObject, NSCopying, NSSecureCoding, NSCoding {
2929
}
3030

3131
open override func isEqual(_ value: Any?) -> Bool {
32-
if let date = value as? Date {
33-
return isEqual(to: date)
34-
} else if let date = value as? NSDate {
35-
return isEqual(to: Date(timeIntervalSinceReferenceDate: date.timeIntervalSinceReferenceDate))
32+
switch value {
33+
case let other as Date:
34+
return isEqual(to: other)
35+
case let other as NSDate:
36+
return isEqual(to: Date(timeIntervalSinceReferenceDate: other.timeIntervalSinceReferenceDate))
37+
default:
38+
return false
3639
}
37-
return false
3840
}
3941

4042
deinit {

Foundation/NSDecimalNumber.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,8 @@ open class NSDecimalNumber : NSNumber {
341341
}
342342

343343
open override func isEqual(_ value: Any?) -> Bool {
344-
if let number = value as? NSDecimalNumber {
345-
return self.decimal == number.decimal
346-
} else {
347-
return false
348-
}
344+
guard let other = value as? NSDecimalNumber else { return false }
345+
return self.decimal == other.decimal
349346
}
350347

351348
}

Foundation/NSDictionary.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,14 @@ open class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding,
142142
}
143143

144144
open override func isEqual(_ value: Any?) -> Bool {
145-
if let other = value as? Dictionary<AnyHashable, Any> {
145+
switch value {
146+
case let other as Dictionary<AnyHashable, Any>:
146147
return isEqual(to: other)
147-
} else if let other = value as? NSDictionary {
148+
case let other as NSDictionary:
148149
return isEqual(to: Dictionary._unconditionallyBridgeFromObjectiveC(other))
150+
default:
151+
return false
149152
}
150-
return false
151153
}
152154

153155
open override var hash: Int {

Foundation/NSError.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,8 @@ open class NSError : NSObject, NSCopying, NSSecureCoding, NSCoding {
169169

170170
override open func isEqual(_ object: Any?) -> Bool {
171171
// Pulled from NSObject itself; this works on all platforms.
172-
if let obj = object as? NSError {
173-
return obj === self
174-
}
175-
176-
return false
172+
guard let obj = object as? NSError else { return false }
173+
return obj === self
177174
}
178175
}
179176

Foundation/NSNumber.swift

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -212,16 +212,18 @@ open class NSNumber : NSValue {
212212
}
213213

214214
open override func isEqual(_ value: Any?) -> Bool {
215-
if let number = value as? Int {
216-
return intValue == number
217-
} else if let number = value as? Double {
218-
return doubleValue == number
219-
} else if let number = value as? Bool {
220-
return boolValue == number
221-
} else if let number = value as? NSNumber {
222-
return CFEqual(_cfObject, number._cfObject)
215+
switch value {
216+
case let other as Int:
217+
return intValue == other
218+
case let other as Double:
219+
return doubleValue == other
220+
case let other as Bool:
221+
return boolValue == other
222+
case let other as NSNumber:
223+
return CFEqual(_cfObject, other._cfObject)
224+
default:
225+
return false
223226
}
224-
return false
225227
}
226228

227229
open override var objCType: UnsafePointer<Int8> {

Foundation/NSObject.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,8 @@ open class NSObject : NSObjectProtocol, Equatable, Hashable {
186186
/// - Parameter object: The object with which to compare the instance.
187187
/// - Returns: `true` if the instance is equal to `object`, otherwise `false`.
188188
open func isEqual(_ object: Any?) -> Bool {
189-
if let obj = object as? NSObject {
190-
return obj === self
191-
}
192-
return false
189+
guard let obj = object as? NSObject else { return false }
190+
return obj === self
193191
}
194192

195193
/// Returns an integer that can be used as a table address in a hash table structure.

Foundation/NSOrderedSet.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,8 @@ open class NSOrderedSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding,
3333
}
3434

3535
open override func isEqual(_ object: Any?) -> Bool {
36-
if let orderedSet = object as? NSOrderedSet {
37-
return isEqual(to: orderedSet)
38-
} else {
39-
return false
40-
}
36+
guard let orderedSet = object as? NSOrderedSet else { return false }
37+
return isEqual(to: orderedSet)
4138
}
4239

4340
open func encode(with aCoder: NSCoder) {

Foundation/NSPredicate.swift

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -73,25 +73,23 @@ open class NSPredicate : NSObject, NSSecureCoding, NSCopying {
7373
}
7474

7575
open override func isEqual(_ object: Any?) -> Bool {
76-
if let other = object as? NSPredicate {
77-
if other === self {
78-
return true
79-
} else {
80-
switch (other.kind, self.kind) {
81-
case (.boolean(let otherBool), .boolean(let selfBool)):
82-
return otherBool == selfBool
83-
case (.format, .format):
84-
NSUnimplemented()
85-
case (.metadataQuery, .metadataQuery):
86-
NSUnimplemented()
87-
default:
88-
// NSBlockPredicate returns false even for copy
89-
return false
90-
}
76+
guard let other = object as? NSPredicate else { return false }
77+
78+
if other === self {
79+
return true
80+
} else {
81+
switch (other.kind, self.kind) {
82+
case (.boolean(let otherBool), .boolean(let selfBool)):
83+
return otherBool == selfBool
84+
case (.format, .format):
85+
NSUnimplemented()
86+
case (.metadataQuery, .metadataQuery):
87+
NSUnimplemented()
88+
default:
89+
// NSBlockPredicate returns false even for copy
90+
return false
9191
}
9292
}
93-
94-
return false
9593
}
9694

9795
// Parse predicateFormat and return an appropriate predicate

Foundation/NSSet.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,14 @@ open class NSSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCodi
114114
}
115115

116116
open override func isEqual(_ value: Any?) -> Bool {
117-
if let other = value as? Set<AnyHashable> {
117+
switch value {
118+
case let other as Set<AnyHashable>:
118119
return isEqual(to: other)
119-
} else if let other = value as? NSSet {
120+
case let other as NSSet:
120121
return isEqual(to: Set._unconditionallyBridgeFromObjectiveC(other))
122+
default:
123+
return false
121124
}
122-
return false
123125
}
124126

125127
open override var hash: Int {

0 commit comments

Comments
 (0)