Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

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

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を数字に変換する方法、文字列が数字かを判断する方法

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

Facebook SDKを試してみる#3(再調査)

SDKのインストーラが起動しても結局frameworkをドラッグドロップしなちゃ追加できない、面倒臭い、と発言してしまったのですが、 どうやらSDKをインストーラにてインストールした場合(SDK4.1)は、importするだけでどうやらSDKが追加できるとかなんとか。

関数引数の参照渡し Inout

Swiftで参照だけを渡す(呼び出し元の変数の値を変更する)にはどうしたらよいのかな〜と調査していると、関数引数に参照渡しする方法でindexinoutという言葉があることを知りました。紹介いたします

UIFontのフォント一覧をWebViewで表示させてそれをキャプチャ保存する

文字フォントがわかっても実際の文字がわかりませんので、 WebViewに出力させて、その結果を端末のPhotoアルバムに保存させる処理をつくってみました
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!