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

この記事からわかること
- SwiftのNSStringとは?
- String型との違い
- プロパティやメソッドの使用方法
index
[open]
\ アプリをリリースしました /
Swiftで登場する文字を管理するデータ型NSString
とはどのようなものなのかをまとめていきます。
NSStringとは?
class NSString : NSObject
そもそもNSString
とはSwiftというより前身であるObjective-Cで使用されていたデータ型クラスです。 Objective-Cにおけるクラス階層のルートクラスであるNSObject
のサブクラスとして定義されており、その中でも文字列を扱うクラスとして定義されています。
文字列に対して比較や変更、検索、情報、ファイルへの書き込みなど文字に関するさまざまな操作を提供しています。
NSString
として生成されたインスタンスは内容の変更ができない仕様になっているので、変更可能にしたい場合はNSMutableString
クラスを使用します。
NSMutableStringクラスとは?
class NSMutableString : NSString
NSMutableString
クラスはNSString
をスーパークラスとするサブクラスです。文字列の管理という点は同じですがNSString
とは違い変更可能な文字列(内容を編集できる文字列)を管理しています。
NSString型とString型との違い
似たような名称の両者の違いを見ていきます。まずNSString
はObjective-Cで使用されていたデータ型であり、String
はSwiftで追加された新しいデータ型になります。
また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クラスとは?文字列の解析や探索方法!
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。