523 Views
August 29, 26
スライド概要
2026年8月29日、100 回記念 集まれ Swift 好き!Swift 愛好会 vol.100 @ Apple で発表したスライドです。10 年前に Swif 3.0 が登場する間際のタイミングで発表したスライドのリバイバル発表です。
正統派趣味人プログラマー。プログラミングとは幼馴染です。
Swift 3.0 で 変わったところ /* 2016.07.31 集まれSwift好き!Swift愛好会 vol9 */ 熊谷友宏 @es̲kumagai REVIVAL 2026/08/29 100回記念 集まれSwift好き!Swift愛好会 vol.100@Apple
Swift 愛好会 祝 100回記念 Since 2015-11-14
愛好会と私
第一印象 Swift の勉強会? → Swift が好きな人!は、満たしていそう。 もくもく会 ? ワークショップ …? お酒を飲みながら…? 食事をしながら…? → 興味がない。 ⋯ ▶︎ ▶︎ ▶︎ ▶︎ Swift 愛好会
▶︎ Swift 愛好会 早速の転機 ダイレクトに誘われてみたり。 → それなら、ちょっと訪れてみようか。
▶︎ ▶︎ ▶︎ ▶︎ Swift 愛好会 なかなか良い Swift を純粋に楽しむ集まり たくさんの人が 楽しそうに過ごしている時間 みんなとたっぷり交流できる時間 和気藹々とした空気感
▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ 参加通算 28回 2015年 12/20 Swift愛好会#2 @ レバレジーズ 2016年 01/20 Swift愛好会#3 @ 21cafe 04/24 Swift愛好会 vol6 @ レバレジーズ 06/27 Swift愛好会 vol8 @ 21cafe 2017年 07/24 Swift愛好会 vol21 @ レバレジーズ 08/19 Swift愛好会 vol22 海辺でもくもく @ カッシーノ 09/20 Swift愛好会 vol23 @ レバレジーズ 10/14 Swift Day ! @ 福岡 ̶ Swift 愛好会 & Swift 復習会 11/20 Swift愛好会 vol24 @ レバレジーズ 2018年 01/20 Swift愛好会 vol26 2周年・合宿 03/27 Swift愛好会 vol29 @ G's Academy 06/20 Swift愛好会 vol32 @ G's Academy 07/14 Swift Day ! @ 岩手 ̶ Swift 愛好会 & Swift 復習会 11/09 Swift愛好会 vol36 @ レバレジーズ 2019年 03/29 Swift愛好会 vol39 @ メルカリ 07/31 Swift愛好会 vol9 @ レバレジーズ 08/29 AKIBA.swift Swift愛好会 @ レバレジーズ 10/27 Swift愛好会 vol12 @ G's Academy 12/03 Swift愛好会 vol13 1周年・合宿 @ 土善旅館 2017年 03/06 AKIBA.swift Swift愛好会 vol2 @ 21cafe 04/28 Swift愛好会 vol18 @ レバレジーズ 05/23 Swift愛好会 vol19 @ サイバーエージェント 05/27 Swift Day ! @ 沖縄 ̶ Swift 愛好会 & Swift 復習会 2020年 01/25 第11回 HAKATA.swift x Swift愛好会 @ LINE Fukuoka 04/28 Swift愛好会 vol.50 @ オンライン 2025年 03/04 Swift愛好会 vol.92 @ DeNA 07/29 Swift愛好会 vol.94 @ ウェルスナビ 2026年 08/29 Swift愛好会 vol.100 @ Apple
▶︎ ▶︎ ▶︎ 熊谷 友宏 Tomohiro Kumagai Swift 言語が好み みんなで楽しむ勉強会が好み 次は何をしようか ̶ 迷走傾向
近況
▶︎ ▶︎ ▶︎ 小型船舶免許(一級・特殊・特定) 2020/08/13 〜 @ 横浜港 何を思ったか、船舶免許を取得してみた。 ぜんぜん知らない世界が楽しい。 2020/08/13 一級小型船舶操縦士免許 2020/09/27 特殊小型船舶操縦士免許 2026/03/03 小型船舶 特定操縦免許
▶︎ ▶︎ 釣り を始めてみたり 2022/04/10 〜 @ 東京湾 操船に慣れてきたので、釣りをしてみる → そうそう釣れない 東京湾で狙える獲物 • カサゴ • スズキ • 真鯛 • ホウボウ • ムシガレイ • タコ • タチウオ • シロギス • アジ • サバ • メバル • サワラ • ワラサ(ブリ)
▶︎ ▶︎ 釣りフェス 2026 観覧してみたり 2026/01/18 パシフィコ横浜 釣りをテーマにした催しもの 村田基さんの キャスティングステージに感動
▶︎ ▶︎ ▶︎ 囲碁シル 始めてみたり 2025/11/05 〜 @ 日本棋院 公式アプリ 新登場の囲碁ゲーム、始めてみた AI サポートがとても良い 公式オフ会にも参加 → 初の碁会所 訪問 • 囲碁シル公式オフ会 @ 新宿囲碁サロン • 囲碁シル交流会 @ 囲碁将棋喫茶 樹林(新橋)
▶︎ ▶︎ 囲碁イベント 参加してみたり 2026/01/09 〜 @ 日本棋院 東京本院 など はじめて、実際の囲碁イベントを観覧 • 日本女子囲碁リーグ Li LEAGUE 開幕式 • 女流囲碁ブレーンズマッチ2026 大盤解説会 • 木部夏生三段サイン会 • 囲碁 将棋トークイベント 盤上の勝負師たち はじめての指導碁を体験 実際の碁盤で第三者と打つのも初めて → 木部夏生さん、格好良すぎた
2025/12/06 イオンシネマ旭川駅前 宗派を超えた法話の大会 「また会いたいお坊さん」を決める 京都で開催 各地のイオンシネマで生中継 仏教をまっすぐエンターテインメントに 昇華できるの、すごい ! ⋯ ▶︎ ▶︎ ▶︎ ▶︎ H1 法話グランプリ 2025 観覧してみたり
▶︎ ▶︎ ▶︎ ▶︎ ▶︎ やさしい Swift 勉強会 2021/07/14 〜 2025/11/28 @ 株式会社ゆめみ 第1回 〜 第602回 → アクセンチュアへの買収統合に伴い、開催終了 株式会社ゆめみさんの、社内勉強会 毎週3回の頻度で開催 自分の勉強会活動を評価して声をかけてくれた → そんな企業、これまで現れなかった(素敵感) 初めての、オンラインでの勉強会開催 社外の人も参加歓迎するの、素敵感
▶︎ ▶︎ やさしい Swift 勉強会 SEASON 2 2025/12/03 〜 YouTube Live 株式会社ゆめみさんで開催していた勉強会、 ほぼ そのままのスタイルで継続開始 → 第603回〜第699回(継続中) YouTube ライブで 13:00 から、 基本「月・水・金」で配信中
▶︎ ▶︎ ▶︎ 読書実況 2025/07/09 〜 YouTube Live やさしい Swift 勉強会が「自分の」タメになっている実感なので、 同じような方式で気になる技術文書を眺めてみたり YouTube ライブで、 だいたい毎日 21:00 から配信中 これまでに読み進めたもの • The Rust Programming Language • SwiftUI Tutorials • Ruby ‒ Documentation • The Python Tutorial • Codex | OpenAI Academy
みんなで Swift 復習会 GO!(実質、休止中) 2017/01/29 〜 今のところ 2020/01/25 まで 2017 2018 01/29 in 札幌 ‒ 1st 05/27 in 沖縄 ‒ 2nd Swift Day ! 07/15 in 仙台 ‒ 3rd 10/14 in 福岡 ‒ 4th Swift Day ! 09/07 in 札幌 ‒ 10th mini 中止 mini 再会 2019 12/25 in 札幌 ‒ 10th 2018 2020 01/13 in 京都 ‒ 6th 04/14 in 福岡 ‒ 8th Swift Day ! 12/15 in 福岡 ‒ 11st 12/22 in 福岡 ‒ 5th 03/16 in 長野 ‒ 7th 07/14 in 岩手 ‒ 9th 01/25 in 福岡 ‒ 12nd with NSEG Swift Days !
技術同人誌 制作 2016/12/29 〜 @ 同人誌即売会 各種
▶︎ ▶︎ ▶︎ 囲碁シルしながら雑談配信 2026/04/18 〜 YouTube Live 何をするにも、 自分だけで学習しても意味ないような 心地のこの頃 囲碁シルもそんな気持ちで配信してみる 自分初のゲーム配信?
同人誌即売会 これからの出展予定 評論情報ザフェスタ 2026/09/21 神奈川 @ 川崎市産業振興会館 旅チケット 13 2026/10/10 東京 @ 大田区産業プラザ PiO おもしろ同人誌バザール 2026/11/01 東京 @ ベルサール神保町 技術書典 21 2026/11/23 東京 @ 池袋サンシャインシティ
▶︎ ▶︎ yidev 第4部 開幕 2026/01/17 〜 I.S.O 横浜 ひなっこ さん 第4部 主催 祝 第3部から 実に8年半ごしの再開幕 どうぞよろしくお願いしますね。
本日
▶︎ ▶︎ ▶︎ 本日は 招待登壇枠 過去の談義のリバイバル企画 → 楽しそうな素敵企画 第9回での Swift 3.0 の談義を、 今の感想も含めながら聞けると嬉しい ほかに 自分の印象に残っている談義があれば そちらでも ウェルカム
🤔 ⋯ 自分の印象に残っている談義があれば そちらでも ?
印象に残る発表といえば 第5回の発表 「プロトコル指向に想う世界観」 .9 2 E .9 2 .9 2 ⋯ ▶︎ 招待登壇枠 .9 2 3 0 - / N ##1: 61 5 #
印象に残る発表といえば 第5回の発表 「プロトコル指向に想う世界観」 .9 2 自主的に 却下 E 戦争の火種を、再び 生むわけにはいかない。 😏 .9 2 .9 2 ⋯ ▶︎ 招待登壇枠 .9 2 3 0 - / N ##1: 61 5 #
印象に残る発表といえば 人間界 ちらみせ 霊界 物質世界 明確に分離 精神世界 見えない 見える 人間 (インスタンス) 2016年 7月 31日 REVIVAL ⋯ Swift 愛好会 vol9 型 プロトコル
▶︎ ▶︎ ▶︎ 招待登壇枠 話題確定 第9回の発表 「Swift 3.0 で変わったところ」 Swift 愛好会の 運営側から提案された話題 自分自身もみんなと一緒に リバイバル体験できて楽しそう Swift 3.0 で変わったところ カジュアル Swift 勉強会のみんなが 好きそうな話題 13 項目 に絞って紹介 /* 2016.07.31 集まれSwift好き!Swift愛好会 vol9 */ EZ-NET 熊谷友宏 Swift 3.0 Developer Preview (Xcode 8.0 beta 3) http://ez-net.jp/
Swift 愛好会 vol9 REVIVAL Swift 3.0 で変わったところ
Swift 愛好会 vol9 REVIVAL Swift 3.0 で変わったところ え、まって、
Swift 愛好会 vol9 REVIVAL Swift 3.0 で変わったところ え、まって、 スライドが 93 ページ あるんですけど。
Swift 3.0 で変わったところ カジュアル Swift 勉強会のみんなが 好きそうな話題 13 項目 に絞って紹介 /* 2016.07.31 集まれSwift好き!Swift愛好会 vol9 */ EZ-NET 熊谷友宏 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 3.0 Developer Preview (Xcode 8.0 beta 3) http://ez-net.jp/
W W D C16 /* 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 2016/06/13 - 2016/06/17 */
熊谷 友宏 /* @es_kumagai */ Tomohiro Kumagai /** */ 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL ▶ Swift 言語が超大好きです! ▶ みんなで楽しむ勉強会が大好きです! ▶ 勉強会で発表するのがとっても好きです! ▶ 書籍 Xcode 5 徹底解説 書きました。 ▶ 技術ブログ EZ-NET を書いたりしてます。
勉強会を開催してます。 横浜 iPhone 開発者勉強会 カジュアル Swift 勉強会 わいわい・ゆるく、iPhone 開発者の みんなで楽しく過ごすのが目的の会 ゆるくみんなで Swift 言語について 語らえる場が欲しくて始めた会 第25回は 11月26日の開催を目標 第11回は、8月下旬か9月上旬を目標 #yidev @ 横浜・馬車道 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL #cswift @ 横浜・青葉台
カジュアル Swift 勉強会 #cswift @ 横浜・青葉台 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
カジュアル Swift 勉強会 目的 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 1. Swift について語らえる場所 2. 談笑しながら学びを深める 3. せっかくだから楽しくありたい
カジュアル Swift 勉強会 心構え 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 1. みんなの意見が正しい 2. みんな知ってる、は思い込み #cswift
Swift 3 will be released sometime in late 2016 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
そろそろ Swift 3 を 把握しておきたい …! 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3 概要 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3 トップニュース ▶ 2016 年の後半にリリース ▶ Swift 2 からの破壊的な仕様変更 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3 目標 ▶ Swift 言語を確定・熟成させる ▶ Swift 3 以降でのソースコードの 互換性を目指す(努力目標) ▶ Swift 3 以降のソース互換破壊は 最小限の影響での実現を目指す 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3 要点 ▶ 新しい API ガイドライン ▶ 言語仕様を洗練 ▶ Objective-C や C のコードを Swift 文化に合わせて取込 ▶ コンパイラや IDE の品質向上 ▶ Swift パッケージマネージャー 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3 着地点 言語の安定化を図り 他環境への移植性を見据える 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3 で変わったところ 多すぎるので、カジュアル Swift 勉強会のみんな が 好きそうな話題 に絞って紹介してみる 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3.0 で変わったところ (1/6+) API Design Guidelines 1. SE-0023 Swift API ガイドライン 3. SE-0006 標準ライブラリへの適用 2. 4. SE-0059 命名規則へのガイドラインの適用 SE-0086 Foundation への適用 言語思想に関する変更 5. SE-0047 戻り値を使わないと警告に 7. SE-0067 小数点数プロトコル 6. 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL SE-0054 Implicitly Unwrapped Optional 廃止へ
Swift 3.0 で変わったところ (2/6+) 言語思想に関する変更 8. 9. SE-0069 Foundation の値型 SE-0055 nil ポインター表現 10. SE-0065 コレクションの再設計 11. SE-0052 イテレーターでの nil 保証 12. SE-0109 BooleanType プロトコルの廃止 文法に関する変更 13. SE-0037 演算子セクションでのコメント 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 14. SE-0066 引数リストの括弧を必須に
Swift 3.0 で変わったところ (3/6+) 文法に関する変更 15. SE-0046 引数ラベル名の規則を統一 16. SE-0040 属性引数の Equal を Colon に変更 17. SE-0071 メンバー参照で使える予約語 18. SE-0036 列挙型内での列挙子表記 19. SE-0060 既定値を持つ引数の順序を固定 プロトコル表記に関する変更 20. SE-0095 protocol<A, B> を演算子で表現 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 21. SE-0115 LiteralConvertible の名称変更
Swift 3.0 で変わったところ (4/6+) 型に関する変更 22. SE-0091 演算子を型が実装 23. SE-0049 @noescape と @autoclosure を移動 24. SE-0031 型に対して inout を定義 25. SE-0035 inout のキャプチャを@noescape に制限 26. SE-0014 Unmanaged は Swift ポインタを扱う 言語構文の削除 27. SE-0007 C スタイル for ループの削除 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 28. SE-0004 演算子 ++ と -- の削除
Swift 3.0 で変わったところ (5/6+) 言語構文の削除 29. SE-0002 カリー化関数構文の削除 30. SE-0003 引数リストから var を削除 31. SE-0053 引数リストから let を削除 32. SE-0029 タプルスプラットの廃止 文法に関する機能追加 33. SE-0048 ジェネリックな型エイリアス 34. SE-0043 case での複数パターンマッチ 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3.0 で変わったところ (6/6+) 型に関する機能追加 35. SE-0032 シーケンスから要素を見つけて取得 36. SE-0094 シーケンスを作る関数 37. SE-0008 Optional 向け flatMap を遅延可能に 38. SE-0093 Slice から元のシーケンスを参照 実行環境に関する変更 39. SE-0028 デバッグ識別子のモダン化 40. SE-0034 #line 識別子の曖昧性を解消 41. SE-0039 Playground リテラルのモダン化 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
言語思想に関する変更 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
戻り値を使わないと警告に SE-0047 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
戻り値を使わないと警告に 以前は、戻り値を使わなくても警告なし ▶ Swift 2 は、 関数の結果を受け取らなくても警告されない ▶ 警告したいなら @warn̲unused̲result を付与 class Item { // 戻り値を使わないと警告される @warn_unused_result func makeFilter() -> Filter {…} // 戻り値を使わなくても警告されない func apply(filter: Filter) -> Item {…} } 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 2.x
戻り値を使わないと警告に 今後は、戻り値を使わないと警告あり ▶ Swift 3 は、 関数の結果を受け取らないと警告される ▶ 警告不要なら @discardableResult を付与 class Item { // 戻り値を使わないと警告される func makeFilter() -> Filter {…} // 戻り値を使わなくても警告されない @discardableResult func apply(filter: Filter) -> Item {…} } 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 3.0 Preview
戻り値を使わないと警告に @warn̲unused̲result は使えない ▶ @warn̲unused̲result は使えない ▶ mutable̲variant と message は ドキュメントコメントで対応(未実装) /// MutatingCounterpart: xxxx /// MonmutatingCounterpart: xxxx func makeFilter() -> Filter {…} 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 3.0 Preview
SE-0047 : 戻り値を使わないと警告に 感想 メソッド定義の負担がかなり軽減されそう 作る側が何も考えなくても、警告扱いになるのが良い! 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
小数点数プロトコル SE-0067 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
小数点数プロトコル プロトコル設計の調整 ▶ 大小比較可能 ▶ 小数点数リテラルに対応 ▶ 剰余演算子 % の廃止 ▶ 基本的な定数の提供 ▶ Float80 型が FloatingPoint に準拠 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
小数点数プロトコル FloatingPoint プロトコル ▶ 以前は、変換イニシャライザと状況判定、 特殊状態( , NaN) を示すプロパティのみ ▶ 値生成、演算、定数などの機能を追加 項目 IntegerLiteralConvertible ) 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 用途 整数リテラルに対応 init(sign:exponent:significand 不動小数点での初期化 static var radix 基数 static var pi 円周率 var ump 次に表現可能な値との差分 ※ 幾つか抜粋
小数点数プロトコル BinaryFloatingPoint プロトコル ▶ 基数が2の浮動小数点数表現 ▶ FloatingPoint プロトコルを継承 ▶ ビットパターンによる操作を追加 項目 用途 RawExponent 指数表現で使う符号なし整数型 static var significandBitCount 仮数表現で使えるビット数 var significandBitPattern 仮数を表現するビットパターン var binade 基数2を指数部で累乗した値 RawSignificand 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 仮数表現で使う符号なし整数型 ※ 幾つか抜粋
小数点数プロトコル
演算に対応
▶ プロトコル自身が演算に対応
▶ 四則演算、大小比較
func add<T: FloatingPoint>(lhs: T, rhs: T) -> T {
return lhs + rhs
}
具体的な型を想定しなくても演算可能に
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
Swift 3.0 Preview
SE-0067 : 小数点数プロトコル 感想 浮動小数点を概念として扱えるのが良さそう 標準ライブラリにしては珍しく膨れたプロトコルな印象 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Foundation の値型 SE-0069 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Foundation の値型 以前の Foundation データ型 ▶ Foundation のデータ型は参照型 ▶ Swift の可変性・不変性と相性が悪い enum Item { case binary(NSData) } 可変性を、宣言でなく型で制御 let data1: NSMutableData = … let data2: NSData = … 値型のインスタンスを生成 let item = Item.binary(data1) data1.appendData(data2) 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL data1 の更新が item にも影響 Swift 2.x
Foundation の値型 今後の Foundation データ型 ▶ 従来の参照型を 別の値型 にブリッジ ▶ Swift の可変性・不変性と調和する enum Item { case binary(Data) } 可変性を、宣言 let, var で制御 var data1: Data = … let data2: Data = … 値型のインスタンスを生成 let item = Item.binary(data1) data1.appendData(data2) 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL data1 の更新は item に影響なし Swift 3.0 Preview
Foundation の値型 新しいデータ型 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 値型 参照型 AffineTransform NSAffineTransform CharacterSet NSCharacterSet, NSMutableCharacterSet Date NSDate DateComponents NSDateComponents Data NSData, NSMutableData IndexSet NSIndexSet, NSMutableIndexSet IndexPath NSIndexPath Notification NSNotification PersonNameComponents NSPersonNameComponents URL NSURL URLComponents NSURLComponents URLQueryItem NSURLQueryItem UUID NSUUID
SE-0069 : Foundation の値型 感想 参照型と値型をブリッジで運用するのが好み 標準ライブラリでなく Foundation で定義していて興味深い 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
イテレーターでの nil 保証 SE-0052 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
イテレーターでの nil 保証 次の値がないときは nil を約束 ▶ ▶ これまでは preconditionFailure の可能性も 今後は、必ず nil で表現する方針に Advance to the next element and return it, or `nil` if no next element exists.Once `nil` has been returned, all subsequent calls return `nil`. protocol IteratorProtocol { associatedtype Element ^ 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL mutating func next() -> Element? Swift 3.0 Preview
SE-0052 : イテレーターでの nil 保証 感想 方針として例外が除かれたのは嬉しい コメントの修正だけで嬉しくなれるの、おもしろい 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
BooleanType プロトコルの廃止 SE-0109 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
BooleanType プロトコルの廃止 根拠 ▶ 真偽値の抽象化は複雑さを招く ▶ 現行の API では大抵 Bool 型を採る ▶ ObjCBool と Bool の相互に変換可能 protocol BooleanType { var boolValue: Bool { get } } 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 2.x
Foundation の値型
抽象化を意識することによる複雑化
▶ Bool ではなく BooleanType を使う
▶ この書き方にどれくらい価値があるだろうか?
func remove<T:BooleanType>(recursively flag: T) {
…
}
func isKindOf<R:BooleanType>(type: AnyType) -> R {
…
}
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
Swift 2.x
Foundation の値型 条件分岐では美しく使えていた … ▶ if や guard は BooleanType に対応 ▶ この場合は美しく機能する struct Condition : BooleanType { … } let condition = Condition(…) if condition { … } 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 以前は、スマートに比較可能だった Swift 2.x
BooleanType プロトコルの廃止 廃止による影響(予定) ▶ BooleanType プロトコルが消滅 ▶ 演算子 !, &&, || を Bool 型で扱う func && (lhs: Bool, rhs: () -> Bool) -> Bool func || (lhs: Bool, rhs: () -> Bool) -> Bool func ! (a: Bool) -> Bool 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 3.0 Preview
SE-0109 : BooleanType プロトコルの廃止 感想 プロトコル廃止で全体がシンプルになりそう 抽象化の必要性を考えるときの、良い参考にもなりそう 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
文法に関する変更 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
メンバー参照で使える予約語 SE-0071 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
メンバー参照で使える予約語 ほぼ自由に予約語を使用可能に ▶ 参照時、ほぼ自由に予約語が使える ▶ 定義では ̀̀ が必要 // 定義では `` が必要 enum DrawingStyle { case `default` case `repeat` case fit } // 使用時は `` が不要 let style = DrawingStyle.default 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 3.0 Preview 1
メンバー参照で使える予約語 型のメンバーについても同様 ▶ プロパティやメソッドでも同様 // 定義では `` が必要 class Object { var `default`: Int func `repeat`(_ times: Int) -> String { … } } // 使用時は `` が不要 let object = Object() let value = object.default 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 3.0 Preview 1
メンバー参照で使える予約語 使用できない予約語 ▶ 言語による評価される語は対象外 ▶ それらを使うときは ̀̀ で括る // 定義では `` が必要 enum Evaluate { case `self` case `dynamicType` } // 使用時も `` が必要 let eval = Evaluate.`self` 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 3.0 Preview 1
SE-0071 : メンバー参照で使える予約語 感想 ほとんどの予約語が普通に使えて嬉しい 特に .default がそのまま書ける功績は大きそう 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
プロトコル表記に関する変更 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
protocol<A, B> を演算子で表現 SE-0095 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
protocol<A, B> を演算子で表現
プロトコルの組み合わせを & で表現
▶ これまでは protocol<A, B> で表現
▶ 今後は A & B で表現(予定)
// プロトコル型で使う
let p: A & B = Value()
// 型引数で使う
func doSomething<T: A & B>(_ value: T) {
}
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
Swift 3.0 Preview
SE-0095 : protocol<A, B> を演算子で表現 感想 嬉しいような、見にくいような 従前の方が面倒だけど、分かりやすい? 慣れの問題? 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
型に関係する変更 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
演算子を型が実装 SE-0091 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
演算子を型が実装
概要
▶ プロトコルが要求する演算子を型で実装(予定)
▶ 所属する型が明瞭になる
struct Value : Equatable {
static func == (lhs: Value, rhs: Value) -> Bool {
}
}
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
Swift 3.0 Preview
演算子を型が実装
オブジェクト指向との相性は?
▶ 継承を考慮すると、メソッドが必要になる
▶ オブジェクト指向的には自然な実装
class Base : Equatable {
func isEqual(to rhs: Base) -> Bool {…}
}
class Sub : Base {
override func isEqual(to rhs: Base) -> Bool {…}
}
func == (lhs: Base, rhs: Base) -> Bool {
return lhs.isEqual(to: rhs)
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
}
Swift 2.x
演算子を型が実装
オブジェクト指向との相性は?
▶ 静的メソッドは継承できる
▶ 比較時に継承を加味してくれるだろうか?
class Base : Equatable {
class func == (lhs: Base, rhs: Base) -> Bool {…}
}
class Sub : Base {
override
class func == (lhs: Base, rhs: Base) -> Bool {…}
}
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
Swift 3.0 Preview
SE-0091 : 演算子を型が実装 感想 最初にとっても混乱したところ!良い! オブジェクト指向との相性は依然、イマイチかもしれない 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
inout のキャプチャを @noescape に制限 SE-0035 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
inout のキャプチャを @noescape に制限
これまでの問題
▶ inout 変数をクロージャーでキャプチャ可能
▶ クロージャーを実行しても更新されない
func makeIncrementer(inout value: Int) -> () -> Void {
return { value += 1; print("Inside:", value) }
}
var value = 1
let incrementer = makeIncrementer(&value)
print("Outside:", value)
incrementer()
print("Outside:", value)
incrementer()
print("Outside:", value)
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
// Outside: 1
// Inside: 2
// Outside: 1
// Inside: 3
// Outside: 1
変更が書き戻されない
変更が書き戻されない
Swift 2.x
inout のキャプチャを @noescape に制限 クロージャーの生存範囲を制限 ▶ inout 変数のキャプチャを @noescape に制限 ▶ 読み取り専用(複製)なら、キャプチャ可能 func something(value: inout Int) { let noescaped: @noescape () -> Void = { value = 10 } } 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL let escaped: () -> Void = { [value] in print(value) 読み取り専用として } キャプチャ可能 Swift 3.0 Preview
SE-0035 : inout のキャプチャを @noescape に制限 感想 考えたことなかった、良い Write back の仕組みとキャプチャは確かに相性悪そう 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
言語構文の削除 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
タプルスプラットの廃止 SE-0029 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
タプルスプラットの廃止
タプルスプラットとは
▶ 引数リストとしてタプルを直接渡せる
▶ ラベル名と登場順は一致する必要あり
func total(price: Int, count: Int) -> Int {
}
// 引数リストを丸ごとタプルで扱える
let item: (Int, count: Int) = (100, 5)
total(item)
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
Swift 2.1
タプルスプラットの廃止
タプルスプラット構文の削除
▶ 原則、引数リストにタプルを渡せなくする
▶ オーバーロードと勘違いしやすいため
▶ タイプチェッカーにとって高負荷なため
func total(price: Int, count: Int) -> Int {
}
// 原則、引数リストを1つのタプルで表現できない
let item: (Int, count: Int) = (100, 5)
total(item)
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
error: missing argument for parameter 'count' in call
Swift 3.0 Preview
タプルスプラットの廃止
ジェネリックで似た書き方は可能
▶ ひとつの型引数で、複数の引数を扱う
▶ ただし、関数を直接渡すときに限る
func apply<T, R>(value: T, f: (T) -> R) -> R {
return f(value)
}
let item: (Int, count: Int) = (100, 5)
func total(price: Int, count: Int) -> Int { … }
apply(value: item, f: total)
2016年 7月 31日
Swift 愛好会 vol9
REVIVAL
Swift 3.0 Preview
SE-0029 : タプルスプラットの廃止 感想 興味深い機能だけれど無くて良い気がする ジェネリックの類似機能で充分実用的な印象 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
文法に関する機能追加 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
case での複数パターンマッチ SE-0043 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
case での複数パターンマッチ 概要 ▶ 複数パターンでマッチする変数を定義可能 ▶ 共通した処理を簡単に記載可能 switch (value1, value2) { case let (value?, nil), let (nil, value?): return value case let (value1?, value2?): return value1 + value2 case (nil, nil): return 0 } 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 3.0 Preview
case での複数パターンマッチ 出来るようになる書き方 switch device { case let .iPhone(_, osVersion, network, _) where osVersion > 8.0, let .iPad(_, osVersion, network, _, true) where network == .cellular, doSomething(device, osVersion, network) case .iPodTouch: doSomething(device) default: doSomething() 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL } Swift 3.0 Preview
SE-0043 : case での複数パターンマッチ 感想 複数の条件で同じ処理を記述できて便利 これで fallthrough を使う場面がほとんどなくなりそう! 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
シーケンスを作る関数 SE-0094 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
シーケンスを作る関数 初期値からシーケンスを作る ▶ sequence(first:, next:) でシーケンスを作る ▶ next の関数が nil を返せば終了 let values = sequence(first: 1) { $0 * 2 } "OZ4FRVFODFӲӴ♫ӕਃӶӵ MFUWBMVFT"OZ4FRVFODF\ "OZ*UFSBUPS*OUJO WBSGJSTU SFUVSO"OZ*UFSBUPS\ EFGFS\ GJSTU ^ 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL SFUVSOGJSTU ^ ^ Swift 3.0 Preview
シーケンスを作る関数 初期状態からシーケンスを作る ▶ sequence(state:, next:) でシーケンスを作る ▶ next の関数が nil を返せば終了 MFUEBUFTTFRVFODF TUBUF \ EBZJOPVU*OU %BUF JO EFGFS\ EBZ ^ MFUDBMFOEBS$BMFOEBSDVSSFOU WBSDPNQPOFOUT DBMFOEBSDPNQPOFOUT <ZFBS NPOUI EBZ> GSPN%BUF DPNQPOFOUTEBZEBZ 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL SFUVSODBMFOEBSEBUF GSPNDPNQPOFOUT ^ Swift 3.0 Preview
SE-0094 : シーケンスを作る関数 感想 任意のシーケンスを簡単に作れて嬉しい 特に終端のないシーケンスを作るのに向いているはず 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Slice から元のシーケンスを参照 SE-0093 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Slice から元のシーケンスを参照 概要 ▶ 各種 Slice 型に base プロパティを持たせる ▶ subscript の書き込み実装をシンプルにする? 意図している狙いが、まだ掴めない … struct MutableSlice<Base : MutableIndexable> { var base: Base { get } } 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL Swift 3.0 Preview
Slice から元のシーケンスを参照 base を観察していて気になる点 ▶ プロトコルでは既定されていない ▶ 型に直接実装されている ▶ ▶ 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL • 様々な Slice 型に実装されている • ArraySlice には実装されていない スライスを書き換えたとき … • 元の内容は書き変わらない • base が指す、元の複製は書き換わる 2016/07/29 の実装を見る限りでは、 • subscript の実装に base は使ってなさそう • ̲writeBackMutableSlice 関数を使っている Swift 3.0 Preview
SE-0093 : Slice から元のシーケンスを参照 感想 知識不足により意図が掴めず … とりあえず base は内部的に使われるもの? 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
今回は、ここまで 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3.0 で変わったところ (1/6+) API Design Guidelines 1. SE-0023 Swift API ガイドライン 3. SE-0006 標準ライブラリへの適用 2. 4. SE-0059 命名規則へのガイドラインの適用 SE-0086 Foundation への適用 言語思想に関する変更 5. SE-0047 戻り値を使わないと警告に 7. SE-0067 小数点数プロトコル 6. 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL SE-0054 Implicitly Unwrapped Optional 廃止へ
Swift 3.0 で変わったところ (2/6+) 言語思想に関する変更 8. 9. SE-0069 Foundation の値型 SE-0055 nil ポインター表現 10. SE-0065 コレクションの再設計 11. SE-0052 イテレーターでの nil 保証 12. SE-0109 BooleanType プロトコルの廃止 文法に関する変更 13. SE-0037 演算子セクションでのコメント 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 14. SE-0066 引数リストの括弧を必須に
Swift 3.0 で変わったところ (3/6+) 文法に関する変更 15. SE-0046 引数ラベル名の規則を統一 16. SE-0040 属性引数の Equal を Colon に変更 17. SE-0071 メンバー参照で使える予約語 18. SE-0036 列挙型内での列挙子表記 19. SE-0060 既定値を持つ引数の順序を固定 プロトコル表記に関する変更 20. SE-0095 protocol<A, B> を演算子で表現 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 21. SE-0115 LiteralConvertible の名称変更
Swift 3.0 で変わったところ (4/6+) 型に関する変更 22. SE-0091 演算子を型が実装 23. SE-0049 @noescape と @autoclosure を移動 24. SE-0031 型に対して inout を定義 25. SE-0035 inout のキャプチャを@noescape に制限 26. SE-0014 Unmanaged は Swift ポインタを扱う 言語構文の削除 27. SE-0007 C スタイル for ループの削除 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL 28. SE-0004 演算子 ++ と -- の削除
Swift 3.0 で変わったところ (5/6+) 言語構文の削除 29. SE-0002 カリー化関数構文の削除 30. SE-0003 引数リストから var を削除 31. SE-0053 引数リストから let を削除 32. SE-0029 タプルスプラットの廃止 文法に関する機能追加 33. SE-0048 ジェネリックな型エイリアス 34. SE-0043 case での複数パターンマッチ 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Swift 3.0 で変わったところ (6/6+) 型に関する機能追加 35. SE-0032 シーケンスから要素を見つけて取得 36. SE-0094 シーケンスを作る関数 37. SE-0008 Optional 向け flatMap を遅延可能に 38. SE-0093 Slice から元のシーケンスを参照 実行環境に関する変更 39. SE-0028 デバッグ識別子のモダン化 40. SE-0034 #line 識別子の曖昧性を解消 41. SE-0039 Playground リテラルのモダン化 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL
Enjoy! Swift /* Thank you */ 2016年 7月 31日 Swift 愛好会 vol9 REVIVAL