Aquí está una versión de trabajo Swift 3, por NSRange, Rango, Cadena y NSString! Disfrutar :)
/// All ranges using NSString and NSRange
/// Is usually used together with NSAttributedString
extension NSString {
public func ranges(of searchString: String, options: CompareOptions = .literal, searchRange: NSRange? = nil) -> [NSRange] {
let searchRange = searchRange ?? NSRange(location: 0, length: self.length)
let subRange = range(of: searchString, options: options, range: searchRange)
if subRange.location != NSNotFound {
let nextRangeStart = subRange.location + subRange.length
let nextRange = NSRange(location: nextRangeStart, length: searchRange.location + searchRange.length - nextRangeStart)
return [subRange] + ranges(of: searchString, options: options, searchRange: nextRange)
} else {
return []
}
}
}
/// All ranges using String and Range<Index>
/// Is usually used together with NSAttributedString
extension String {
public func ranges(of searchString: String, options: CompareOptions = [], searchRange: Range<Index>? = nil) -> [Range<Index>] {
if let range = range(of: searchString, options: options, range: searchRange, locale: nil) {
let nextRange = range.upperBound..<(searchRange?.upperBound ?? endIndex)
return [range] + ranges(of: searchString, searchRange: nextRange)
} else {
return []
}
}
}
Si entiendo la Documentación correctamente, esto daría el rango de cualquiera de los caracteres en el conjunto. Pero necesito el recuento de * cada * personaje. – Elliot
mi idea es mantener el diccionario de char -> contar pares y luego obtener el carácter en el índice dado e incrementar su conteo en el diccionario ... o simplemente podría iterar sobre la cadena y verificar si cada carácter está en su conjunto, si entonces es increment su conteo – stefanB