HOME > NSString
Objective-CではNSStringが利用されていましたが、SwiftからはStringが追加。どちらも利用できますがStringを使うことをオススメです。
NSObject
↑
NSString
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のβ版ではできていたのですが、 どうやら正規版になってからはコンパイルできないようです。
CSVの様な特定の区切り文字を配列で取得する方法
let str = "hop, step, jump"
let arr = str.componentsSeparatedByString(", ")
println(arr[0]) // hop
println(arr[1]) // step
println(arr[2]) // jump!
一文字ずつ出力します。
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
}
}
文字列を検索する際の処理です
let str = "Swiftサラリーマンここに登場しました"
if let r = str.rangeOfString("登場") {
println("見つかった -> \(r)")
} else {
println("見つからない")
}
//出力
//"見つかった -> 14..<16"
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"
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)
文字列を切り出しする際の処理です
let str = "Swiftサラリーマンここに登場しました"
var test = str.substringToIndex(advance(str.startIndex,7))
出力 = Swiftサラ
let str = "Swiftサラリーマンここに登場しました"
var test = str.substringFromIndex(advance(str.startIndex,7))
出力 = リーマンここに登場しました
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... |
Tweet | |||
|