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
復習OptionSet
Search
Tomohiro Nishimura
December 26, 2016
Technology
0
290
復習OptionSet
Tomohiro Nishimura
December 26, 2016
Tweet
Share
More Decks by Tomohiro Nishimura
See All by Tomohiro Nishimura
レガシーシステム洗い出し大作戦
sixeight
0
1.7k
我々のRealmはどこからやってくるのか
sixeight
1
420
まだ見ぬAPIに思いを馳せて
sixeight
0
150
今年読んだまんが
sixeight
0
240
べんりな検索ワード
sixeight
0
270
Readable Width in action
sixeight
0
190
UIPreviewInteraction: Overview
sixeight
1
630
Accessing the Music Library
sixeight
1
2.9k
Web APIについての雑談
sixeight
0
410
Other Decks in Technology
See All in Technology
JAWS DAYS 2026 楽しく学ぼう!ストレージ 入門
yoshiki0705
2
150
8万デプロイ
iwamot
PRO
2
230
ランサムウエア対策してますか?やられた時の対策は本当にできてますか?AWSでのリスク分析と対応フローの泥臭いお話。
hootaki
0
110
新職業『オーケストレーター』誕生 — エージェント10体を同時に回すAgentOps
gunta
4
1.8k
情シスのための生成AI実践ガイド2026 / Generative AI Practical Guide for Business Technology 2026
glidenote
0
200
Security Diaries of an Open Source IAM
ahus1
0
210
組織全体で実現する標準監視設計
yuobayashi
2
480
複数クラスタ運用と検索の高度化:ビズリーチにおけるElastic活用事例 / ElasticON Tokyo2026
visional_engineering_and_design
0
130
JAWS DAYS 2026 ExaWizards_20260307
exawizards
0
410
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
8
7.2k
白金鉱業Meetup_Vol.22_Orbital Senseを支える衛星画像のマルチモーダルエンベディングと地理空間のあいまい検索技術
brainpadpr
2
290
Claude Code のコード品質がばらつくので AI に品質保証させる仕組みを作った話 / A story about building a mechanism to have AI ensure quality, because the code quality from Claude Code was inconsistent
nrslib
13
6.2k
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
160
Abbi's Birthday
coloredviolet
2
5.3k
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
sira's awesome portfolio website redesign presentation
elsirapls
0
190
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Automating Front-end Workflow
addyosmani
1370
200k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
410
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
210
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Transcript
෮श0QUJPO4FU ؔϞόΠϧΞϓϦݚڀձ
JE4JYFJHIU w ג ͯͳΞϓϦέʔγϣϯΤϯδχΞ w ۙگ w יϏʔϧͱ͍͏ΠϕϯτͰ࣌ؒҿΈଓ͚ ͨΒඓਫ͕ࢭ·Βͳ͘ͳΓ·ͨ͠
None
0QUJPO4FU
త w Ϣʔβʔ͕ૢ࡞ՄೳͳॲཧΛࢦఆ͢Δ w ྫ͑ w ಡΜͰ͍͍͚Ͳɺॻ͖ࠐΉࣄͰ͖ͳ͍ͱ͔ w ฤूͰ͖Δ͚Ͳɺ৽ن࡞Ͱ͖ͳ͍ͱ͔
&OVNFSBUJPO enum Permission { case read case create case edit
case delete }
&OVNFSBUJPO let permissions: [Permission] = [.read, .create] func read() {
guard permissions.contains(.read) else { forbidden() return } showReadViewController() }
&OVNFSBUJPO w ϦιʔεͷύʔϛογϣϯͱϢʔβʔͷݖݶ w ͜ͷϦιʔεʹରͯ͜͠ͷϢʔβʔ͕Մೳͳૢ࡞ ͳΜͳͷ͔ w ͞Βʹάϧʔϓຖʹݖݶ͕͋ͬͨΓ͢Δͱʜ let resourcePermissions:
[Permission] = [.read] let userPermissions: [Permission] = [.read, .create, .edit, .delete] resourcePermissions.filter { permission in return userPermissions.contains(permission) }
None
#JUXJTFPQFSBUJPO // _ _ _ _ delete edit create read
// 0 0 0 0 1 1 1 1 struct Permission { static let read: UInt8 = 0b00000001 static let create: UInt8 = 0b00000010 static let edit: UInt8 = 0b00000100 static let delete: UInt8 = 0b00001000 } 6*OUʹ໊લ͚ͭΔͱྑͦ͞͏ʜ
#JUXJTFPQFSBUJPO let permissions: UInt8 = Permission.read | Permission.create func read()
{ guard (permissions & Permission.read) != 0 else { forbidden() return } showReadViewController() }
#JUXJTFPQFSBUJPO w ͜ͷϦιʔεʹରͯ͜͠ͷϢʔβʔ͕Մೳͳૢ࡞ ͳΜͳͷ͔ let resource: UInt8 = Permission.read let
user: UInt8 = Permission.read | Permission.create | Permission.edit | Permission.delete let currentPermission = resource & user
None
0QUJPO4FU struct Permission: OptionSet { let rawValue: UInt8 static let
read = Permission(rawValue: 1 << 0) static let create = Permission(rawValue: 1 << 1) static let edit = Permission(rawValue: 1 << 2) static let delete = Permission(rawValue: 1 << 3) }
0QUJPO4FU let permissions: Permission = [.read, .create] func read() {
guard permissions.contains(.read) else { forbidden() return } showReadViewController() }
4FU"MHFCSB func contains(Self) func insert(Self) func update(with: Self) func remove(Self)
func union(Self) func intersection(Self) func symmetricDifference(Self) func formUnion(Self) func formIntersection(Self) func formSymmetricDifference(Self)
4FU"MHFCSB let p: Permission = [.read, .create, .edit] let o:
Permission = [.edit, .delete] p //=> 0111 o //=> 1100 p.union(o) //=> 1111 p.intersection(o) //=> 0100 p.symmetricDifference(o) //=> 1011
0QUJPO4FU w ͜ͷϦιʔεʹରͯ͜͠ͷϢʔβʔ͕Մೳͳૢ࡞ ͳΜͳͷ͔ let resource: Permission = [.read] let
user: Permission = [.read, .create, .edit, .delete] let current: Permission = resource.intersection(user)
None
Γ͍ͨ if case Permission.read = userPermission { print("Can read") }
Γ͍ͨ switch userPermission { case Permission.read: print("Can Read") fallthrough case
Permission.create: print("Can Create") fallthrough case Permission.edit: print("Can edit") fallthrough case Permission.delete: print("Can delete") }
dPQFSBUPS extension Permission { static func ~=(lhs: Permission, rhs: Permission)
-> Bool { return rhs.contains(lhs) } }
None
༇շͳؒͨͪ
༇շͳؒͨͪ w 6*$POUSPM4UBUF w OPSNBM w EJTBCMFE w FUDʜ button.setTitle("དྷ",
for: .normal) button.setTitle("ؔϞό", for: [.highlighted, .selected]) button.setTitle("ΑΖ͘͠", for: .disabled)
Α͍͓Λ