HOME > NSString
NSString
Objective-CではNSStringが利用されていましたが、SwiftからはStringが追加。どちらも利用できますがStringを使うことをオススメです。
NSStringのクラス階層
NSObject
↑
NSString
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を数字に変換する方法、文字列が数字かを判断する方法
↓こんな記事もありますよ!
![]() | アプリから電話をかけるObjective-Cではサンプルがありましたが日本語では無かったので共有です! |
![]() | 新しくなったLawsonの無料WiFiを試してみたネットでローソン無料Wifiを調べていたのですがネットを接続するにはアプリが必要との誤情報が多かった(今まではアプリが必要だった)ですが、2015年の6月からはアプリの必要ありません。 Wifiで接続して登録すればPCからでも利用できました。手順を記載してまいります。 |
![]() | RSSリーダで利用するAPIを検証してみるニュースアプリの様なRSSを表示させたいのですがXMLを処理するAPIが数点存在するようです。 Swiftにあったものを見つけ出せたらと思います。 |
Tweet
![]() |
|||
|