Skip to content

Commit d1b39d1

Browse files
authored
Improve AttributedString.CharacterView to Substring conversion in AttributedStringProtocol.range(of:) (#1440)
1 parent 6cfc3d8 commit d1b39d1

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

Benchmarks/Benchmarks/AttributedString/BenchmarkAttributedString.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ let benchmarks = {
6363
Benchmark.defaultConfiguration.metrics = [.cpuTotal, .wallClock, .throughput]
6464

6565
let manyAttributesString = createManyAttributesString()
66+
let longString = createLongString()
6667
#if FOUNDATION_FRAMEWORK
6768
let manyAttributesNS = createManyAttributesNSString()
68-
let longString = createLongString()
6969
let toInsertNS = NSAttributedString(string: String(repeating: "c", count: longString.characters.count))
7070
#endif
7171

@@ -509,6 +509,10 @@ let benchmarks = {
509509
blackHole(value)
510510
}
511511
}
512+
513+
Benchmark("range(of:)") { benchmark in
514+
longString.range(of: "cccc")
515+
}
512516
}
513517

514518

Sources/FoundationEssentials/AttributedString/AttributedStringProtocol.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ extension AttributedStringProtocol {
267267
internal func _range<T: StringProtocol>(of stringToFind: T, options: String.CompareOptions = []) -> Range<AttributedString.Index>? {
268268

269269
// TODO: Implement this on BigString to avoid O(n) iteration
270-
let substring = Substring(characters)
270+
let substring = Substring(String(_characters: self.characters))
271271
guard let range = try? substring._range(of: Substring(stringToFind), options: options) else {
272272
return nil
273273
}

0 commit comments

Comments
 (0)