中安佑一(69)8181件のシェア(ちょっぴり話題の記事)この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。はじめにモバイルアプリサービス部の中安です。そのいずれも簡単なように見えてややこしく、容易そうに見えて困難です。それは常に「Unicode」や「マルチバイト」、はたまた「書記素」などの問題が孕むからです。Swiftもまたバージョンが変わるごとに文字列の扱いが変遷してきました。その度に文字列がコレクションになったりならなかったりという迷いもこういった事情が絡んでるからなんだろうなと思います。この記事ではそういう学術的な深い話はしません。ある一定の理解は必要かと思いますが、実際のアプリ開発でさっと手に入れたいのは「人が文字を見て数える文字数」かなと思います。今記事は何個かの文字列長取得の方法と、その正確性と速さの検証を掲載し、実際にアプリに実装するならどのような方法があるかという観点で書きたいと思います。ちなみに、もし文字列について深い話が知りたい場合は下記のブログあたりが参考になるかもしれません。5000補足をすると表の中の「期待値」は「人が文字を見て数える文字数」のことです。文字列長で問題になりやすいのがUnicodeに後から追加されていった絵文字たちの扱いですので、絵文字を重点的に検証対象にしています。5000文字は人が普通に読んで10分弱くらいかかる文章量だそうです。この方法はSwift3で文字列長と検索すると一番良く見られる方法かと思います。0.000057残念ながら、一部の絵文字でNGが出てしまいました。この方法は正確性でいうと不十分であるということですね。NSString#length次は、Objective-Cから存在するNSStringを使った旧来的な文字列長の取得方法を試します。0.000020結果としては絵文字や特殊文字が壊滅的にNGです。若干パフォーマンスがよいです。unicodeScalars.countそれぞれの文字ビューにエンコードしてカウントするという方法もあります。文字列の長さソース的にはこういう書き方ですね。同じ機構だそうなので、結果としてはそれと同じになるようです。0.000037こちらはアスキーコードのみが正確性を有します。いう使用用途でないと文字列長取得には厳しいかと思います。アスキーコードとはいえ、速度が抜群に早いというわけでもないようです。0.000032Unicodeの一定範囲内で巻き取れる絵文字等はちゃんと数えられるものの、範囲外になるとNGになります。ここでは猫の絵文字だけがOKになっています。enumerateSubstringsを使うenumerateSubstringsを使って文字列長を取得する方法もあるようです。作ってやることになります。0.031083ご覧のようにオールOKです。正確に文字列長を取得することができます。ベンチマークを見ていただくと分かるように、軒並み他の方法よりもコストがかかっています。一文字ずつ走査していく方法なので、当然文字数が増えれば増えるほどパフォーマンスは落ちていきます。文字列長取得の実装ここまでの検証を踏まえて、文字列の長さを取得するためには2通りのパターンを考えたほうが良さそうです。プロパティを使用することで、正確性と速さを使い分けることができます。Swift4では最後にSwift4では文字列長はどのように取得するでしょうか。Swift4で文字列は再びコレクションとして扱われることになります。プロパティが付加されます。悩ましい部分はSwift4で改善されたといえます。実装も不要の産物にすることができますね。691,143iOS開発歴がそこそこ長くなってきました。Swiftが好きなのでSwiftの小ネタ中心にブログを執筆しています。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。EC2)環境において、不要な踏み台サーバをなくすことができる便利なアップデートです。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介252SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健232こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。カフェ店長のオカノです。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。