Skip to content

Commit 2c9d8b3

Browse files
committed
Improve AttributedString.CharacterView to Substring conversion in AttributedStringProtocol.range(of:)
1 parent 870b5c0 commit 2c9d8b3

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

@@ -501,6 +501,10 @@ let benchmarks = {
501501
blackHole(value)
502502
}
503503
}
504+
505+
Benchmark("range(of:)") { benchmark in
506+
longString.range(of: "cccc")
507+
}
504508
}
505509

506510

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)