Created
October 28, 2014 02:20
-
-
Save msealand/49575c10aaf18042ab5f to your computer and use it in GitHub Desktop.
Generate a random character from a range of characters (Unicode safe)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func randomCharacter<T: IntervalType where T.Bound == Character>(inRange range: T) -> Character { | |
let startScalars = String(range.start).unicodeScalars | |
let startCode = startScalars[startScalars.startIndex].value | |
let endScalars = String(range.end).unicodeScalars | |
let endCode = endScalars[endScalars.startIndex].value | |
let characterCount = distance(startCode, endCode) + 1 | |
let rndOffset = Int(arc4random_uniform(UInt32(characterCount))) | |
return Character(UnicodeScalar(startCode + rndOffset)) | |
} |
This code was not working when I was trying to use it.
I kept getting an error: "Ambiguous use of operator '+'" on line 11.
The reason for this is rndOffset is being returned as an Int, but startCode is UInt32.
To fix this add Int() to startCode in line 11 so both startCode and rndOffset are of the same type.
func randomCharacter<T: IntervalType where T.Bound == Character>(inRange range: T) -> Character {
let startScalars = String(range.start).unicodeScalars
let startCode = startScalars[startScalars.startIndex].value
let endScalars = String(range.end).unicodeScalars
let endCode = endScalars[endScalars.startIndex].value
let characterCount = distance(startCode, endCode) + 1
let rndOffset = Int(arc4random_uniform(UInt32(characterCount)))
return Character(UnicodeScalar(Int(startCode) + rndOffset))
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Example: