@@ -99,22 +99,24 @@ extension Version: Comparable {
99
99
return true // Prerelease lhs < non-prerelease rhs
100
100
}
101
101
102
- let zippedIdentifiers = zip ( lhs. prereleaseIdentifiers, rhs. prereleaseIdentifiers)
103
- for (lhsPrereleaseIdentifier, rhsPrereleaseIdentifier) in zippedIdentifiers {
102
+ for (lhsPrereleaseIdentifier, rhsPrereleaseIdentifier) in zip ( lhs. prereleaseIdentifiers, rhs. prereleaseIdentifiers) {
104
103
if lhsPrereleaseIdentifier == rhsPrereleaseIdentifier {
105
104
continue
106
105
}
107
106
108
- let typedLhsIdentifier : Any = Int ( lhsPrereleaseIdentifier) ?? lhsPrereleaseIdentifier
109
- let typedRhsIdentifier : Any = Int ( rhsPrereleaseIdentifier) ?? rhsPrereleaseIdentifier
107
+ // Check if either of the 2 pre-release identifiers is numeric.
108
+ let lhsNumericPrereleaseIdentifier = Int ( lhsPrereleaseIdentifier)
109
+ let rhsNumericPrereleaseIdentifier = Int ( rhsPrereleaseIdentifier)
110
110
111
- switch ( typedLhsIdentifier, typedRhsIdentifier) {
112
- case let ( int1 as Int , int2 as Int ) : return int1 < int2
113
- case let ( string1 as String , string2 as String ) : return string1 < string2
114
- case ( is Int , is String ) : return true // Int prereleases < String prereleases
115
- case ( is String , is Int ) : return false
116
- default :
117
- return false
111
+ if let lhsNumericPrereleaseIdentifier = lhsNumericPrereleaseIdentifier,
112
+ let rhsNumericPrereleaseIdentifier = rhsNumericPrereleaseIdentifier {
113
+ return lhsNumericPrereleaseIdentifier < rhsNumericPrereleaseIdentifier
114
+ } else if lhsNumericPrereleaseIdentifier != nil {
115
+ return true // numeric pre-release < non-numeric pre-release
116
+ } else if rhsNumericPrereleaseIdentifier != nil {
117
+ return false // non-numeric pre-release > numeric pre-release
118
+ } else {
119
+ return lhsPrereleaseIdentifier < rhsPrereleaseIdentifier
118
120
}
119
121
}
120
122
0 commit comments