mono0926
9/30/2016 - 7:11 AM

string.character.method.swift

// まずString.CharacterViewにメソッド定義
extension String.CharacterView {
    
public subscript(sequentialAccess range: Range<Int>) -> String.CharacterView {
        let lower = range.lowerBound
        let startIndex = index(self.startIndex, offsetBy: lower)
        let endIndex = index(startIndex, offsetBy: range.count)
        return self[startIndex..<endIndex]
    }
    
    public subscript(sequentialAccess index: Int) -> Character {
        return self[sequentialAccess: index..<index + 1].first!
    }
    
}

// Stringにはラップメソッドを生やす
extension String {
    public subscript(sequentialAccess range: Range<Int>) -> String {
        return String(characters[sequentialAccess: range])
    }
    
    public subscript(sequentialAccess index: Int) -> String {
        return self[sequentialAccess: index..<index + 1]
    }
}

let s = "Café du 🌍"
s[sequentialAccess: 2..<4] // fé
s[sequentialAccess: 3] // é