SwiftではNSStringではなくString型を使います。Objective-CのNSStringとの橋渡しは、ほとんど意識しなくてよいです。従来のiOS SDKおよびサードパーティライブラリでNSStringで宣言されているものは、Stringで受け取れます。

Stringの宣言

// 変数型で宣言
var country = "Italy"
// 定数型で宣言
let defaultCountry = "Japan"

長い場合は、こういうふうにも書けます。

var sql = "SELECT * FROM users" +
  " WHERE age >= 20" +
  " ORDER BY age DESC" +
  " LIMIT 100"

文字列の連結

上で既に書いてしまいましたが、文字列の連結は+(プラス)演算子でできます。

var str1 = "Italian"
str1 += " Wine"
// str1 = Italian Wine
var str2 = "Chianti is " + str
// str2 = Chianti is Italian Wine

変数の内容を文字列に埋め込む

(変数名)で埋め込めます。

var name = "EIMEI"
var age = 29
var text = "\(name)さんの実年齢はともかくタニタの体重計が示す体内年齢は(age)歳です"
// text = EIMEIさんの実年齢はともかくタニタの体重計が示す体内年齢は29歳です

0づめ表示など必要な場合はNSStringのformatを使うこともできます。

var value = 123
var formattedString: String = NSString(format: "%05d", value)
// formattedString = 00123

Optional型の変数の場合は注意。そのまま文字列に埋め込むとOptionalという文字列が含まれます。

var str1: String? = "Wine"
var text = "\(str1)"
// text = "Optional("Wine")"

!をつけることで回避できます。Warnnigを出して欲しいところですが・・・

var text = "\(str1!)"
// text = "Wine"

文字列の長さ

基本的にはcountを使うのがベストだと思います。

text = "体内年齢29歳"
length = count(text)
// length = 7

Stringには絵文字を混ぜることもできますが、絵文字を1文字としてカウントするためにはcountを使うのが良いようです。

text = "🐶"
length = count(text)
// length = 1

Stringにはutf16というプロパティがあり、これをcount()に渡すと文字数を返しますが、絵文字の場合1文字としてカウントしない場合があります。

text = "🐶"
length = count(text.utf16)
// length = 2

ややこしいのはNSString#lengthはcount(String#utf16)と同じ値を返すということです。

var text2: NSString = "🐶"
length = text2.length
// length = 2

Objective-Cのコードを移植する場合、NSString#lengthをcountに置き換えると異なる結果を返すことがあるということです。ほとんどの場合は大丈夫だと思いますが、注意が必要なこともあるでしょう。

文字列の比較

==、!=演算子が使えます。

var str1 = "abc"
var str2 = "abc"
if str1 == str2 {
    // 等しいのでここに来る
}

if str1 != str2 {
    // 等しいのでここには来ない
}

Character型

一文字だけの場合はCharacter型で宣言します。

var char1: Character = "c"
var str1 = "str1"
// 文字列との連結はappendを使う。+は使えません。
str1.append(char1)

for文で一文字ずつ取り出すこともできます。使う状況は限られていそうですが・・・

for c in "Wine" {
  // ループで、変数cはW,i,n,eの順に代入される
}