Skip to content

Instantly share code, notes, and snippets.

@bigsan
Last active March 26, 2019 06:45
Show Gist options
  • Save bigsan/458ac1035552be5b3abafebfa569f722 to your computer and use it in GitHub Desktop.
Save bigsan/458ac1035552be5b3abafebfa569f722 to your computer and use it in GitHub Desktop.
[String Extensions] #string #subscript #encoding
import Foundation
extension CFStringEncodings {
var encoding: String.Encoding {
return String.Encoding(rawValue: CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(self.rawValue)))
}
}
public extension String.Encoding {
public static let big5 = CFStringEncodings.big5.encoding
public static let gb18030 = CFStringEncodings.GB_18030_2000.encoding
}
public extension String {
subscript(position: Int) -> Character? {
guard let pos = index(startIndex, offsetBy: position, limitedBy: endIndex) else { return nil }
return self[pos]
}
subscript(range: Range<Int>) -> String? {
guard let start = index(startIndex, offsetBy: range.lowerBound, limitedBy: endIndex) else { return nil }
guard let end = index(startIndex, offsetBy: range.upperBound, limitedBy: endIndex) else { return nil }
return String(self[start..<end])
}
subscript(range: ClosedRange<Int>) -> String? {
guard let start = index(startIndex, offsetBy: range.lowerBound, limitedBy: endIndex) else { return nil }
guard let end = index(startIndex, offsetBy: range.upperBound, limitedBy: endIndex) else { return nil }
return String(self[start...end])
}
subscript(range: PartialRangeFrom<Int>) -> String? {
guard let start = index(startIndex, offsetBy: range.lowerBound, limitedBy: endIndex) else { return nil }
return String(self[start...])
}
subscript(range: PartialRangeUpTo<Int>) -> String? {
guard let end = index(startIndex, offsetBy: range.upperBound, limitedBy: endIndex) else { return nil }
return String(self[..<end])
}
subscript(range: PartialRangeThrough<Int>) -> String? {
guard let end = index(startIndex, offsetBy: range.upperBound, limitedBy: endIndex) else { return nil }
return String(self[...end])
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment