Skip to content

Instantly share code, notes, and snippets.

@soffes
Created June 27, 2015 19:26
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save soffes/b6bd2a8d3e9b8317efd2 to your computer and use it in GitHub Desktop.
Save soffes/b6bd2a8d3e9b8317efd2 to your computer and use it in GitHub Desktop.
import Foundation
extension String {
var isHomogeneous: Bool {
if lengthOfBytesUsingEncoding(NSUTF8StringEncoding) == 0 {
return true
}
var homogeneous = true
var character: NSString?
let range = Range(start: startIndex, end: endIndex)
enumerateSubstringsInRange(range, options: [.ByComposedCharacterSequences]) { substring, _, _, stop in
if let character = character {
if character != substring {
homogeneous = false
stop = true
}
} else {
character = substring
}
}
return homogeneous
}
}
import XCTest
class StringExtensionTests: XCTestCase {
func testHomogeneous() {
XCTAssertTrue("~~~".isHomogeneous)
XCTAssertTrue("aaa".isHomogeneous)
XCTAssertTrue("😎😎".isHomogeneous)
XCTAssertTrue("😎".isHomogeneous)
XCTAssertTrue("".isHomogeneous)
XCTAssertFalse("as".isHomogeneous)
XCTAssertFalse(" ~~~".isHomogeneous)
}
}
@marklarr
Copy link

I don't have Swift 1.2 (I know, embarrassing) but does this work?

Set(Array(str)).count <= 1

@kmikael
Copy link

kmikael commented Jun 27, 2015

@marklarr Yes, it works!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment