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.4k
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
610
Zenn のウラガワ ~エンジニアのアウトプットを支える環境で Google Cloud が採用されているワケ~ #burikaigi #burikaigi_h
kongmingstrap
22
8.5k
AWS re:Invent 2024 ふりかえり
kongmingstrap
0
480
製造の課題に立ち向かう Manufacturing Data Engine と Manufacturing Connect の ご紹介
kongmingstrap
0
1.4k
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
970
JAWS-UG 福岡 #16 re:Invent 現地に行った人のお話 #jawsugfuk #jawsug
kongmingstrap
0
770
AppMod の開発のイマを知るために現地に潜入した私が見たものは・・・? #GoogleCloudNext
kongmingstrap
0
870
Kong Gateway から読みとく、 API統合・API連携サービスの最新情報 #devio2023
kongmingstrap
0
2.3k
Cloud Run に憧れて Google Cloud を推進している話 / CX事業本部で使われている技術
kongmingstrap
0
380
Other Decks in Technology
See All in Technology
module Synths; end
asonas
1
120
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
830
Beyond the Hype: Practical AI for Your Oracle Database with MCP
thatjeffsmith
1
270
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
110
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
2
1.5k
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
300
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
240
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
130
IoTハンズオンの舞台裏
shirouz
2
140
KAEN Company Deck
kaen
PRO
0
320
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
1.1k
V8コントリビュート超入門
riyaamemiya
0
140
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Accessibility Awareness
sabderemane
1
200
Claude Code のすすめ
schroneko
67
230k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
970
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
570
Building an army of robots
kneath
306
46k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
440
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Abbi's Birthday
coloredviolet
3
9.8k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
A Modern Web Designer's Workflow
chriscoyier
698
190k
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 δΣωϦΫεͱԠ༻͢Δͱͷൺֱॲཧ؆ܿʹه ड़Ͱ͖Δ