↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > NSString

NSString

Objective-CではNSStringが利用されていましたが、SwiftからはStringが追加。どちらも利用できますがStringを使うことをオススメです。

NSStringのクラス階層

NSObject

NSString

参考Appleサイト(英語): Foundation Framework Reference NSString Class Reference

NSStringとStringどちらも使えば良いか

SwiftからはNSStringではなくStringの利用を推奨されています。どうやらOptional型が導入されてString側には明記なしにはnilが代入できない(安全性が高い)為のようです<NSStringにはnilを入れることが可能>。ただし、 NSStringにはあったlength等のメンバ関数がStringにはなかったりと不便もあります。
参考:Swift - which types to use? NSString or String

文字列長は以下の様に取得できます。


//Objective-C
NSString *str = @"あいうえお";
print([str length]);
↓
//Swift
var str = "あいうえお";
println(countElement(str));
最新のXCodeではcountElement がcountになっているようです。2015/6/23

//おまけ:これでも同じです
var str = "あいうえお";
println((str as NSString).length);

//おまけ:絵文字の場合などは文字列長に注意です
var emoji = "👍";
println(countElements(emoji));//1
println(emoji.utf16Count);//2

bridgeToObjectiveCという関数でStringをNSStringに変換することがSwiftのβ版ではできていたのですが、 どうやら正規版になってからはコンパイルできないようです。

文字列分割ーcomponentsSeparatedByString

CSVの様な特定の区切り文字を配列で取得する方法


let str = "hop, step, jump"
let arr = str.componentsSeparatedByString(", ")
println(arr[0])   // hop
println(arr[1])   // step
println(arr[2])   // jump!

for inで文字列を一文字ずつとりだす方法

一文字ずつ出力します。


for char in "swift-salaryman"{
    println(char)// s w i f t - s a l a r y m a nをそれぞれ
}

文末や文頭に同じ値が含まれているかをチェック。

hasPrefix、hasSuffixという、文字列比較の便利な関数があります。

hasPrefix = 文字列頭に同じ文字列が含まれている場合はtrue
hasSuffix = 逆に文字列末に同じ文字があればtrue


var salarymans = ["swift-salaryman", "manga-salaryman", "news-salaryman"]
for man in salarymans {
    if man.hasPrefix("swift") {
        println(message) //swift-salaryman
    }
    if man.hasSuffix("salaryman"){
        println(message) //swift-salaryman, manga-salaryman,news-salaryman
    }
}

文字列検索(PHPのstrpos)

文字列を検索する際の処理です

文字列の先頭から[登場]を探す


let str = "Swiftサラリーマンここに登場しました"
if let r = str.rangeOfString("登場") {
    println("見つかった -> \(r)")
} else {
    println("見つからない")
}

//出力
//"見つかった -> 14..<16"

文字列の途中(5文字目から最後まで)から[リーマン]を探す


let str = "Swiftサラリーマンここに登場しました"
if let r = str.rangeOfString("リーマン",range:Range(start: advance(str.startIndex, 5), end: advance(str.endIndex, 0))) {
    println("見つかった -> \(r)")
} else {
    println("見つからない")
}

//出力
//"見つかった -> 7..<11"

文字列の途中(11文字目から最後まで)から[リーマン]を探す


let str = "Swiftサラリーマンここに登場しました"
if let r = str.rangeOfString("リーマン",range:Range(start: advance(str.startIndex, 11), end: advance(str.endIndex, 0))) {
    println("見つかった -> \(r)")
} else {
    println("見つからない")
}

//出力
//"見つからない"

このr=rangeOfStringの戻り値はString.Index型。 (14はstartIndex, 16はendIndex)として取得可能ですが、 これを+1する場合は注意が必要です。advance(r.startIndex,1) のように+1の場合はする必要があります。(iterate)

文字列切り出し切り取り(PHPのsubstr)

文字列を切り出しする際の処理です

先頭から7文字まで全て取得


let str = "Swiftサラリーマンここに登場しました"
var test = str.substringToIndex(advance(str.startIndex,7))

出力 = Swiftサラ

7文字以降を全て取得


let str = "Swiftサラリーマンここに登場しました"
var test = str.substringFromIndex(advance(str.startIndex,7))

出力 = リーマンここに登場しました

前から7文字目〜後ろから4文字目の間を取得


let str = "Swiftサラリーマンここに登場しました"
var test = str.substringWithRange(Range(start: advance(str.startIndex, 7), end: advance(str.endIndex, -4)))

出力 = リーマンここに登場

Stringを数字に変換する方法、文字列が数字かを判断する方法

↓こんな記事もありますよ!


2021-05-14 14:21:41

WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。

AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、 昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は...

2021-05-06 14:04:37

LINEのアニメーションスタンプ制作の落とし穴、、、失敗談

ゴールデンウィークにLINEスタンプを作成してみました。 作り切って申請も通したんですが、意図したアニメーションと違う、、、、 LINEクリエーターの画面だと、アニメーションのプレビュー...

2021-05-01 18:05:35

久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。

忘れないようにメモ エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。 ターゲット→ex...
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!