2

Python のように添え字演算子を介して部分文字列を取得できるようにする Swift の String クラスの拡張機能を作成したいと考えています。これは、次の方法で Range クラスを使用して実現できます。

extension String {

    subscript (range: Range<Int>) -> String? {
        if range.startIndex < 0 || range.endIndex > count(self) {
            return nil
        }
        let range = Range(start: advance(startIndex, range.startIndex), end: advance(startIndex, range.endIndex))
        return substringWithRange(range)
    }
}

これにより、次の使用法が可能になります

let string = "OptimusPrime"
string[0...6] // "Optimus"

ただし、負の整数を使用して、文字列の末尾と先頭からインデックスを作成できるようにしたいと考えています。

string[7...(-1)] // "Prim"

Range クラスは上記の拡張startIndexを超えることを許可しないendIndexため、この動作を実現するには不十分です。

Range オブジェクトは明らかにこの拡張機能には使用できないため、Python と同じ構文を単純に使用するのが理にかなっています。

string[0:2] // "Op"
string[0:-1] // "OptimusPrim"

これは可能ですか?どうすればこれを行うことができますか?

4

1 に答える 1

2

次のようなPythonのような構文を取得できると思います:

subscript (start:Int, end:Int) -> String?

それはあなたを手放します"bla bla"[0,3]

次に、負の数を取り込む場合は、代わりに文字列の長さから負の数を引いた値に変換して、範囲が有効になるようにします

于 2015-08-12T08:02:32.123 に答える