Swift String操作が非常に複雑で扱いにくいのはなぜですか?SwiftでStringの一部を反復処理する
逆の文字列を繰り返し処理しますが、最初の文字は無視しなければなりません。さて、これは次のように行うことができる:
var firstTime = true
for i in textBefore.characters.reversed() {
if firstTime {
firstTime = false
} else {
if String(i).personalFunction() {
// something
} else {
// something else
}
}
}
しかし、本当に私はちょうどのような何かやりたい:私たちはintとしてインデックスを取得することはできませんだから、なぜ
textBefore = textBefore.characters.reversed()
for i in 1...textBefore.characters.count {
if textBefore.get(i).personalFunction() {
// something
} else {
// something else
}
}
を。そして、なぜtextBefore.characters.reversed()がStringでなく、単にStringに逆関数があるのでしょうか。これらすべての問題は、SwiftのStringsを使って作業することにとてもイライラさせ、文字列をcharの配列に変換するという愚かなことをします:Sまたは上記の私の提案する解決策のようなもの...古いファッションです...私はこのスティッフルのために私の脳を正しい方向に向けるために、スピーディーなグルを必要としています。
「なぜ、」文字列内の文字にアクセスするにはUTF-8デコードのためO(1)ではありません。最悪の場合、それはO(n)です。ほとんどの言語では、バイトへの直接アクセスが可能です(UTF-8は無視され、複雑なものやマルチバイト文字が表示された場合は微妙なバグが挿入される)か、スペース効率の良いデータ構造で動作します。 O(1)だが文字あたり4バイト(UTF-16など)未満のものを使用するものは、ラテンの言語以外の言語で作業しているときに驚くべきコーナーケースの扉を開きます。 –
(Swiftがスクリプト言語になりたいと言い、それがそうであると言えば、文字列の部分とのより良いインターフェースを開発する必要があるでしょう。Swiftには最高の解決策があります。単純なケースでは簡単にしますが、他のケースではバグがあります)。 –
@RobNapierこれは意味がありますが、ほとんどの場合、これらの問題は問題がありません。今すぐSwiftは開発者の95%に問題をもたらし、5%は回避策を講じなければならなかった問題はありません。そして、95%〜20%や何かが、適切に機能するように回避策(拡張など)を行う可能性があります。 – Warpzit