Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Enumはデキる子 ~ case .Success(let value): ~
Search
Takaaki Tanaka
May 30, 2016
Technology
2.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Enumはデキる子 ~ case .Success(let value): ~
AKIBA.swiftでの発表資料です
Takaaki Tanaka
May 30, 2016
More Decks by Takaaki Tanaka
See All by Takaaki Tanaka
[デモです] NotebookLM で作ったスライドの例
kongmingstrap
0
560
Zenn のウラガワ ~エンジニアのアウトプットを支える環境で Google Cloud が採用されているワケ~ #burikaigi #burikaigi_h
kongmingstrap
22
8.5k
AWS re:Invent 2024 ふりかえり
kongmingstrap
0
460
製造の課題に立ち向かう Manufacturing Data Engine と Manufacturing Connect の ご紹介
kongmingstrap
0
1.3k
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
950
JAWS-UG 福岡 #16 re:Invent 現地に行った人のお話 #jawsugfuk #jawsug
kongmingstrap
0
750
AppMod の開発のイマを知るために現地に潜入した私が見たものは・・・? #GoogleCloudNext
kongmingstrap
0
860
Kong Gateway から読みとく、 API統合・API連携サービスの最新情報 #devio2023
kongmingstrap
0
2.3k
Cloud Run に憧れて Google Cloud を推進している話 / CX事業本部で使われている技術
kongmingstrap
0
370
Other Decks in Technology
See All in Technology
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
400
「休む」重要さ
smt7174
5
1.5k
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
1.2k
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
320
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
480
AIツールを導入しても生産性はあがらない? カオナビが直面した 3つの壁と乗り越え方。/ Overcoming 3 Barriers to AI-Driven Productivity at kaonavi
kaonavi
0
120
Network Firewallやっていき!
news_it_enj
0
250
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
3
730
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.5k
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
270
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
410
20260720_クラウド女子会×PyLadiesTokyoコラボ Amazon Bedrock ハンズオン用資料
yuuka51
1
110
Featured
See All Featured
Paper Plane
katiecoart
PRO
2
52k
Docker and Python
trallard
47
4k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Facilitating Awesome Meetings
lara
57
7k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
410
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Designing Experiences People Love
moore
143
24k
Bash Introduction
62gerente
615
220k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
260
Transcript
&OVNσΩΔࢠ ",*#"TXJGU dDBTF4VDDFTT MFUWBMVF d 5BLBBLJ5BOBLB
"CPVU.F w ాத໌ 5BLBBLJ5BOBLB w Ϋϥεϝιουגࣜձࣾ w !LPOHNJOHUSBQ w
J04%FWFMPQFS 4XJGU0CKFDUJWF$ w (ZB[4RVBSF(JU)VC
"HFOEB w &OVNʹ͍ͭͯ w &OVNʹ͍ͭͯ w &OVNʹ͍ͭͯ
&OVN w ϓϩάϥϜ্ɺҙຯͷ͋ΔΛྻڍͯ͠ఆٛ͢Δ͜ ͱ͕Ͱ͖Δ w 0CKFDUJWF$ɹˠɹ4XJGUͰେ෯ʹڧԽ͞Εͨ w Ή͠Ζ΄΅ผͱݴͬͯաݴͰͳ͍
&OVN enum { IMTypeCute, IMTypeCool, IMTypePassion }; w $$ 4UZMFɹ
&OVN typedef NS_ENUM(NSUInteger, IMType) { IMTypeCute, IMTypeCool, IMTypePassion }; w
0CKFDUJWF$ $PDPB 4UZMFɹ
&OVN typedef NS_OPTIONS(NSUInteger, IMType) { IMTypeCute = 1UL << 0,
IMTypeCool = 1UL << 1, IMTypePassion = 1UL << 2, IMTypeAll = (IMTypeCute | IMTypeCool | IMTypePassion) }; w 0CKFDUJWF$ $PDPB 4UZMFɹ
4XJGUͰͷ&OVNͷಛ w ୈҰڃΦϒδΣΫτʢpSTUDMBTTUZQFʣ w 3BX7BMVFʢ4USJOH*OU'MPBUʣ w ωετఆ͕ٛͰ͖Δ w ಠࣗͷϝιουΛఆٛͰ͖Δ w
$BTFʹUVQMF͕͑Δ
ୈҰڃΦϒδΣΫτ ʢpSTUDMBTTUZQFʣ w มʹ֨ೲՄೳ w σʔλߏʹ֨ೲՄೳ w ͦΕࣗମ͕ಠࣗʹଘࡏͰ͖Δ w ؔͷύϥϝʔλͱͯ͢͜͠ͱ͕Ͱ͖Δ
w ؔͷΓͱͯ͠ฦ͢͜ͱ͕Ͱ͖Δ
3BX7BMVF enum PeachBoySlave: Int { case Dog case Monkey case
Bird } w 4XJGU4UZMFɹ print(PeachBoySlave.Bird.rawValue) // 2
3BX7BMVF enum PeachBoySlave: String { case Dog = "Dog" case
Monkey = "Monkey" case Bird = "Bird" } w 4XJGU4UZMFɹ print(PeachBoySlave.Bird.rawValue) // Bird
3BX7BMVF guard let slaveType = PeachBoySlave(rawValue: "Bird") else { return
} w 3BX7BMVFʹଘࡏ͢Ε&OVNΛ࣮ମԽͰ͖Δ print(slaveType) // Bird
ωετ enum PeachBoySlave: String { case Dog case Monkey case
Bird enum Actor { case Grandpa case Grandma } } w &OVNͷఆٛʹ͞Βʹ&OVNΛఆٛ͢Δ͜ͱ͕Մ ೳ
ಠࣗͷϝιουఆٛ enum PeachBoyEnemy { case Oni case Boss func encount()
{ print("Enemy") } } w &OVNʹؔΛఆٛ͢Δ͜ͱ͕Ͱ͖Δ
ܭࢉܕϓϩύςΟఆٛ enum PeachBoyEnemy { case Oni case Boss … var
count: Int { switch self { case Oni: return 10 case Boss: return 1 } } } w ܭࢉܕϓϩύςΟͷΈఆٛ͢Δ͜ͱ͕Ͱ͖Δ
5VQMF enum PeachBoyEnemy { case Oni(String, String) case Boss func
encount() { switch self { case Oni(let number, let colorName): print(Number + ": Oni " + colorName) case Boss: print("Boss") } } } w $BTFʹ5VQMFΛࢦఆ͢Δ͜ͱͰҟͳΔߏΛ࣋ͭ ϝϯόʔΛఆٛ͢Δ͜ͱ͕Ͱ͖Δ
5VQMF let oni: PeachBoyEnemy = .Oni("1", "Red") oni.encount() w $BTFʹ5VQMFΛࢦఆ͢Δ͜ͱͰҟͳΔߏΛ࣋ͭ
ϝϯόʔΛఆٛ͢Δ͜ͱ͕Ͱ͖Δ 1: Oni Red
"MBNPpSFͷ3PVUFSͰͷԠ༻ enum Router: URLRequestConvertible { case ItemSearch([String : AnyObject]) var
URLString: String { let baseURL = "http://shopping.yahooapis.jp/ShoppingWebService/V1/json/" switch self { case ItemSearch: return baseURL + "itemSearch" } } var Method: Alamofire.Method { switch self { case .ItemSearch: return .GET } } var URLRequest: NSMutableURLRequest { let request = NSMutableURLRequest(URL: NSURL(string: URLString)!) switch self { case .ItemSearch(let parameters): return Alamofire.ParameterEncoding.URL.encode(request, parameters: parameters).0 } }
"MBNPpSFͷ3PVUFSͰͷԠ༻ enum Router: URLRequestConvertible { case ItemSearch([String : AnyObject]) …
var URLRequest: NSMutableURLRequest { let request = NSMutableURLRequest( URL: NSURL(string: URLString)!) switch self { case .ItemSearch(let parameters): return Alamofire.ParameterEncoding. URL.encode( request, parameters: parameters).0 } }
δΣωϦΫεͷԠ༻ public enum Result<Value, Error: ErrorType> { case Success(Value) case
Failure(Error) } w UVCMFͱδΣωϦΫεΛࢦఆ͢Δ͜ͱͰޭ࣌ɺࣦ ഊ࣌Λฦ͢&OVNΛఆٛ͢Δ͜ͱ͕Ͱ͖Δ
δΣωϦΫεͷԠ༻ func resultWithCode(code: Int?) -> Result<Int, NSError> { guard let
unwrapedCode = code else { return .Failure(NSError(domain: "MyApp", code: 0, userInfo: nil)) } return .Success(unwrapedCode) } w ΓΛ3FTVMUʹͨ͠߹
δΣωϦΫεͷԠ༻ let result = resultWithCode(200) switch result { case .Success(let
code): print(code) case .Failure(let error): print(error) } w ύλʔϯϚονͰൺֱ͢Δ͜ͱ͕Ͱ͖Δ
࣮ࡍʹ͏έʔε Alamofire.request(Router.ItemSearch(parameters)) .responseJSON { response in switch response.result { case
.Success(let value) : let json = JSON(value) guard let resultSet = json["ResultSet"].dictionary else { return } guard let resultsOfOnePage = resultSet["0"]?.dictionary else { return } guard let results = resultsOfOnePage["Result"]?.dictionary else { return } self.items = results.keys.map { Item(json: results[$0]!) } case .Failure(let error) : print("error: \(error)") } self.tableView?.reloadData() self.refreshControl?.endRefreshing() }
࣮ફฤ .PEFSO$PSF%BUBCZUSZ4XJGU
·ͱΊ w 0CKFDUJWF$͔ΒͷڧԽ͞Ε͍ͯΔ w աڈͷҨ࢈Λܕ҆શͳϓϩάϥϜੜ·ΕมΘΒͤ ΔώϯτʹͳΔ w δΣωϦΫεͱԠ༻͢Δͱͷൺֱॲཧ؆ܿʹه ड़Ͱ͖Δ