Initial Commit
This commit is contained in:
57
WOKA/Helpers/StringSubScript.swift
Normal file
57
WOKA/Helpers/StringSubScript.swift
Normal file
@@ -0,0 +1,57 @@
|
||||
//
|
||||
// StringSubScript.swift
|
||||
// WOKA
|
||||
//
|
||||
// Created by MacBook Pro on 29/04/24.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
/*
|
||||
The first subscript allows you to access an element at a specific offset in the string.
|
||||
The next two subscripts allow you to get a subsequence using a range (open or closed).
|
||||
The last three subscripts handle partial ranges, providing a subsequence from the start, up to a specified index, or from a specified index to the end.
|
||||
*/
|
||||
|
||||
import Foundation
|
||||
extension StringProtocol {
|
||||
subscript(_ offset: Int) -> Element { self[index(startIndex, offsetBy: offset)] }
|
||||
subscript(_ range: Range<Int>) -> SubSequence { prefix(range.lowerBound+range.count).suffix(range.count) }
|
||||
subscript(_ range: ClosedRange<Int>) -> SubSequence { prefix(range.lowerBound+range.count).suffix(range.count) }
|
||||
subscript(_ range: PartialRangeThrough<Int>) -> SubSequence { prefix(range.upperBound.advanced(by: 1)) }
|
||||
subscript(_ range: PartialRangeUpTo<Int>) -> SubSequence { prefix(range.upperBound) }
|
||||
subscript(_ range: PartialRangeFrom<Int>) -> SubSequence { suffix(Swift.max(0, count-range.lowerBound)) }
|
||||
}
|
||||
|
||||
extension LosslessStringConvertible {
|
||||
var string: String { .init(self) }
|
||||
}
|
||||
|
||||
extension BidirectionalCollection {
|
||||
subscript(safe offset: Int) -> Element? {
|
||||
if offset < 0 { return nil }
|
||||
guard !isEmpty, let i = index(startIndex, offsetBy: offset, limitedBy: index(before: endIndex)) else { return nil }
|
||||
return self[i]
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
let test = "Hello USA 🇺🇸!!! Hello Brazil 🇧🇷!!!"
|
||||
test[safe: 10] // "🇺🇸"
|
||||
test[11] // "!"
|
||||
test[10...] // "🇺🇸!!! Hello Brazil 🇧🇷!!!"
|
||||
test[10..<12] // "🇺🇸!"
|
||||
test[10...12] // "🇺🇸!!"
|
||||
test[...10] // "Hello USA 🇺🇸"
|
||||
test[..<10] // "Hello USA "
|
||||
test.first // "H"
|
||||
test.last // "!"
|
||||
|
||||
// Subscripting the Substring
|
||||
test[...][...3] // "Hell"
|
||||
|
||||
// Note that they all return a Substring of the original String.
|
||||
// To create a new String from a substring
|
||||
test[10...].string // "🇺🇸!!! Hello Brazil 🇧🇷!!!"
|
||||
*/
|
||||
Reference in New Issue
Block a user