Skip to content

Instantly share code, notes, and snippets.

@ChrisMarshallNY
Last active July 13, 2020 12:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ChrisMarshallNY/c4836fb64960734791e499ccf98ccbb2 to your computer and use it in GitHub Desktop.
Save ChrisMarshallNY/c4836fb64960734791e499ccf98ccbb2 to your computer and use it in GitHub Desktop.
Strange Character Set Comparison Issue
import Foundation
public extension StringProtocol {
func containsOneOfThese(_ inCharacterset: CharacterSet) -> Bool {
self.contains { (char) in
char.unicodeScalars.contains { (scalar) in inCharacterset.contains(scalar) }
}
}
func containsOneOfThese(_ inString: String) -> Bool {
return false
}
}
let space = " "
let joker = "๐ŸƒŸ"
let both = space + joker
let spadesNumberCards = "๐Ÿ‚ก๐Ÿ‚ข๐Ÿ‚ฃ๐Ÿ‚ค๐Ÿ‚ฅ๐Ÿ‚ฆ๐Ÿ‚ง๐Ÿ‚จ๐Ÿ‚ฉ๐Ÿ‚ช"
let spadesFaceCards = "๐Ÿƒ›๐Ÿ‚ฎ๐Ÿ‚ซ๐Ÿ‚ญ"
let testString1 = spadesNumberCards + space + spadesFaceCards
let testString2 = spadesNumberCards + joker + spadesFaceCards
let testString3 = spadesNumberCards + both + spadesFaceCards
print("These Are The Strings We Are Testing:\n")
print("Test String 1: \"\(testString1)\"")
print("Test String 2: \"\(testString2)\"")
print("Test String 3: \"\(testString3)\"")
print("\nFirst, See If Any Of the Strings Contain Spaces:\n")
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(space.unicodeScalars)) ? "" : "not ")have a space.")
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(space.unicodeScalars)) ? "" : "not ")have a space.")
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(space.unicodeScalars)) ? "" : "not ")have a space.")
print("\nNext, See If Any Of the Strings Contain Jokers:\n")
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(joker.unicodeScalars)) ? "" : "not ")have a joker.")
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(joker.unicodeScalars)) ? "" : "not ")have a joker.")
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(joker.unicodeScalars)) ? "" : "not ")have a joker.")
print("\nIt Now Works:\n")
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(both.unicodeScalars)) ? "" : "not ")have a space or a joker.")
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(both.unicodeScalars)) ? "" : "not ")have a space or a joker.")
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(both.unicodeScalars)) ? "" : "not ")have a space or a joker.")
import Foundation
public extension StringProtocol {
func containsOneOfThese(_ inCharacterset: CharacterSet) -> Bool {
self.contains { (char) in
char.unicodeScalars.contains { (scalar) in inCharacterset.contains(scalar) }
}
}
}
let space = " "
let joker = "๐ŸƒŸ"
let both = space + joker
let spadesNumberCards = "๐Ÿ‚ก๐Ÿ‚ข๐Ÿ‚ฃ๐Ÿ‚ค๐Ÿ‚ฅ๐Ÿ‚ฆ๐Ÿ‚ง๐Ÿ‚จ๐Ÿ‚ฉ๐Ÿ‚ช"
let spadesFaceCards = "๐Ÿƒ›๐Ÿ‚ฎ๐Ÿ‚ซ๐Ÿ‚ญ"
let testString1 = spadesNumberCards + space + spadesFaceCards
let testString2 = spadesNumberCards + joker + spadesFaceCards
let testString3 = spadesNumberCards + both + spadesFaceCards
print("These Are The Strings We Are Testing:\n")
print("Test String 1: \"\(testString1)\"")
print("Test String 2: \"\(testString2)\"")
print("Test String 3: \"\(testString3)\"")
print("\nFirst, See If Any Of the Strings Contain Spaces:\n")
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(charactersIn: space)) ? "" : "not ")have a space.")
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(charactersIn: space)) ? "" : "not ")have a space.")
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(charactersIn: space)) ? "" : "not ")have a space.")
print("\nNext, See If Any Of the Strings Contain Jokers:\n")
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(charactersIn: joker)) ? "" : "not ")have a joker.")
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(charactersIn: joker)) ? "" : "not ")have a joker.")
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(charactersIn: joker)) ? "" : "not ")have a joker.")
print("\nOK, Now it gets weird:\n")
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(charactersIn: both)) ? "" : "not ")have a space or a joker.")
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(charactersIn: both)) ? "" : "not ")have a space or a joker.")
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(charactersIn: both)) ? "" : "not ")have a space or a joker.")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment