Contenu connexe Similaire à リテラルと型の続きの話 #__swift__ (20) Plus de Tomohiro Kumagai (20) リテラルと型の続きの話 #__swift__3. 熊谷友宏
横浜 iPhone 開発者勉強会
#yidev
わいわい・ゆるく、iPhone 開発者の
みんなで楽しく過ごすのが目的の会
【 横浜・馬車道 】
カジュアル Swift 勉強会
#cswift
ゆるくみんなで Swift を語らえる場を
作りたくて始めた会
【 横浜・青葉台 】
第22回を 2016-03-05 に開催予定 第5回を 2016-02-06 に開催予定
@es_kumagai
EZ-NET http://ez-net.jp/
勉強会
4. 熊谷友宏
Xcode 5 徹底解説 MOSA
Xcode 5 の全機能を
徹底的に解説した本
OSX/iOS 系の歴史深い
有料会員制の勉強会
紙版は絶版、電子書籍は販売中
Xcode 7 でも役立つはず 法人会員も多数
@es_kumagai
EZ-NET http://ez-net.jp/
書籍 / 登壇
6. CodePiece for OS X
勉強会を楽しむアプリ
ソースコードを Twitter と Gist に同時投稿できる
勉強会で知見をみんなと共有したい時とかに便利!
できること
#__swift__
12. struct MyValue : IntegerLiteralConvertible {
init(integerLiteral value: Int) {
}
}
型がリテラルを引き受けるQ.
Literal Convertible プロトコルA.
前回のあらすじ
要点 (2/2)
13. ▶ 整数リテラル
▶ 小数点数リテラル
▶ 真偽値リテラル
▶ 文字列リテラル
▶ nil リテラル
▶ 配列リテラル
▶ 辞書リテラル
… 3
… 3.1
… true, false
… "STRING"
… nil
… [ value, ... ]
… [ key : value, ... ]
リテラルの種類
前回のあらすじ
19. let version = 2.1
let text = "Swift (version)"
print(text)
"Swift (version)" と書くと?Q.
変数が実際の値に差し替えられるA.
文字列リテラル
値を挿入できる文字列表現
Swift 2.1
27. Swift uses string interpolation to include the name of a
constant or variable as a placeholder in a longer string, and
to prompt Swift to replace it with the current value of that
constant or variable. Wrap the name in parentheses and
escape it with a backslash before the opening parenthesis:
The Swift Programming Language
println("The current value of
friendlyWelcome is (friendlyWelcome)")
28. ▶ 文字列の中に値を埋め込む仕組み
▶ (value) という書式で埋め込む
// value の値は "Swift 2.1" になる
let version = 2.1
let value = "Swift (version)"
要点
String Interpolation
31. ▶ 型が String Interpolationを
受け入れることを表明するプロトコル
▶ 複雑な書式をパーツ毎に分解して変換する
protocol StringInterpolationConvertible {
init(stringInterpolation strings: Self...)
init<T>(stringInterpolationSegment expr: T)
}
StringInterpolationConvertible
プロトコル
37. ▶ 型でString Interpolationの受け入れを表明
▶ StringInterpolationConvertibleを適用
struct FormattedString : StringInterpolationConvertible {
// このプロパティで文字列を表現
var value: String
型をString Interpolationに対応
String Interpolation 対応 (1/4)
38. ▶ 整数型の値を変換する処理
▶ 自身の型で3桁区切りの文字列を表現
struct FormattedString : StringInterpolationConvertible {
// 整数型を受け取った場合は、3桁区切りの文字列にする
init<T:IntegerType>(stringInterpolationSegment expr:T) {
let value = NSNumber(longLong: expr.toIntMax())!
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
self.value = formatter.stringFromNumber(value)
整数値は3桁区切りの文字列で表現
String Interpolation 対応 (2/4)
39. ▶ 整数型以外の値を変換する処理
▶ 自身の型に そのまま文字列で表現
struct FormattedString : StringInterpolationConvertible {
// 整数型以外を受け取った場合は、そのまま文字列にする
init<T>(stringInterpolationSegment expr: T) {
self.value = String(expr)
}
整数値以外は文字列で表現
String Interpolation 対応 (3/4)
40. ▶ 最後に変換済みの全パーツを取得
▶ それらを使って自身の型を再構築
struct FormattedString : StringInterpolationConvertible {
// 変換済みの全てのパーツを文字列として連結して、完成
init(stringInterpolation strings: FormattedString...) {
self.value = strings.reduce("") { $0 + $1.value }
}
各パーツをまとめて完成
String Interpolation 対応 (4/4)
42. ▶ String Interpolationを記載
▶ それが自作型であることを明記
let version = 2000
let string: FormattedString = "Windows (version)"
完成した型を使う
String Interpolation 対応
// 実行結果
Windows 2,000
print(string.value)