【Swift】NSStringとは?String型との違いや使用方法

この記事からわかること

  • SwiftNSStringとは?
  • Stringとの違い
  • プロパティメソッド使用方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Swiftで登場する文字を管理するデータ型NSStringとはどのようなものなのかをまとめていきます。

NSStringとは?

class NSString : NSObject

そもそもNSStringとはSwiftというより前身であるObjective-Cで使用されていたデータ型クラスです。 Objective-Cにおけるクラス階層のルートクラスであるNSObjectのサブクラスとして定義されており、その中でも文字列を扱うクラスとして定義されています。

文字列に対して比較や変更、検索、情報、ファイルへの書き込みなど文字に関するさまざまな操作を提供しています。

NSStringとして生成されたインスタンスは内容の変更ができない仕様になっているので、変更可能にしたい場合はNSMutableStringクラスを使用します。

NSMutableStringクラスとは?

公式リファレンス:NSMutableStringクラス

class NSMutableString : NSString

NSMutableStringクラスはNSStringスーパークラスとするサブクラスです。文字列の管理という点は同じですがNSStringとは違い変更可能な文字列(内容を編集できる文字列)を管理しています。

NSString型とString型との違い

公式リファレンス:String構造体

似たような名称の両者の違いを見ていきます。まずNSStringObjective-Cで使用されていたデータ型であり、StringSwiftで追加された新しいデータ型になります。

またNSStringはクラスで、Stringは構造体として定義されています。

class NSString : NSObject
@frozen  struct String

おすすめ記事:【Swift】構造体(struct)とは?クラスとの違いと使い方

新規追加されたString構造体はNSStringクラスとの相互変換が可能になっています。ですがデータ型としては別物になるのでそれぞれが保持するプロパティやメソッドも異なるので注意する必要があります。

またSwiftでは基本的にはNSStringを意識しなくてもString型を使用すれば文字操作は可能です。

異なるプロパティ

例えば文字数を返すプロパティ名は両者で異なります。Stringクラスにはlengthプロパティは定義されておらず、代わりにcountプロパティが定義されています。

import Foundation

let str = "Hello World!!"   // String 
let nsStr = str as NSString // NSString

print(str.count)    // 13 
print(nsStr.length) // 13

破壊的メソッドの使用

それぞれ3つのデータ型に破壊的メソッドを実行してみたところ以下のような結果になりました。

import Foundation

let str = String("こんにちは 世界!!")   // String 
let nsStr = NSString(string:"こんにちは 世界!!") // NSString
let nsMutaStr = NSMutableString(string: "こんにちは 世界!!") // NSMutableString

str.append("!!")       // Error:Cannot use mutating member on immutable value: 'str' is a 'let' constant
nsStr.appending("!!")  // "こんにちは 世界!!!!"
nsMutaStr.append("!!") // "こんにちは 世界!!!!"
// nsMutaStr.appending("!!") // "こんにちは 世界!!!!"

NSMutableStringに関してはStringクラスのappendメソッドも使用することができるようです。

SwiftでのNSStringの使用方法

ここからはSwiftでNSStringを使用する方法をまとめていきます。

イニシャライザ

NSString型を定義するにはinit(string: String)形式のイニシャライザを使用することでインスタンスを生成できます。引数にはString型の文字列をそのまま渡します。

let nsStr = NSString(string:"Hello World!!")

プロパティ

文字数を取得

print(nsStr.length) // 13

小文字表現

print(nsStr.lowercased) // hello world!!

大文字表現

print(nsStr.uppercased) // HELLO WORLD!!

メソッド

文字を追加

print(nsStr.appending("!!")) // Hello World!!!!

指定文字を含むかどうか

print(nsStr.contains("He")) // true

おすすめ記事:【Swift】Scannerクラスとは?文字列の解析や探索方法!

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index