Skip to content

Instantly share code, notes, and snippets.

@aepryus
Created March 1, 2018 00:48
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aepryus/368638dcc2c2fd110d4c21bdfeebf90f to your computer and use it in GitHub Desktop.
Save aepryus/368638dcc2c2fd110d4c21bdfeebf90f to your computer and use it in GitHub Desktop.
Swift String Extension for accessing Characters via Int; plus conversion to C
//
// String+AE.swift
// Aepryus
//
// Created by Joe Charlier on 11/20/17.
// Copyright © 2017 Aepryus Software. All rights reserved.
//
import Foundation
public extension String {
public subscript(i: Int) -> Character { // [a]
return self[index(startIndex, offsetBy: i)]
}
public subscript(r: CountableClosedRange<Int>) -> String { // [a...b]
let start = index(startIndex, offsetBy: r.lowerBound)
let end = index(startIndex, offsetBy: r.upperBound)
return String(self[start...end])
}
public subscript(r: CountablePartialRangeFrom<Int>) -> String { // [a...]
let start = index(startIndex, offsetBy: r.lowerBound)
let end = endIndex
return String(self[start..<end])
}
public subscript(r: PartialRangeThrough<Int>) -> String { // [...b]
let start = startIndex
let end = index(startIndex, offsetBy: r.upperBound)
return String(self[start...end])
}
public subscript(r: PartialRangeUpTo<Int>) -> String { // [..<b]
guard r.upperBound > 0 else {return ""}
let start = startIndex
let end = index(startIndex, offsetBy: r.upperBound-1)
return String(self[start...end])
}
public func loc(of string: String) -> Int? {
for i: Int in 0..<count-string.count {
let test: String = self[i...(i+string.count-1)]
if string == test {
return i
}
}
return nil
}
public var capitalize: String {
guard let first = first else { return "" }
return String(first).uppercased() + dropFirst()
}
public func toInt8() -> UnsafeMutablePointer<Int8> {
return UnsafeMutablePointer<Int8>(mutating: (self as NSString).utf8String!)
}
public func toCString() -> [CChar]? {
return self.cString(using: .utf8)
}
public static func uuid() -> String {
return UUID().uuidString
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment