Slide 1

Slide 1 text

@questbeat KVC Collection Operators

Slide 2

Slide 2 text

http://github.com/questbeat/ KVCCollectionOperatorsExample

Slide 3

Slide 3 text

KVC Collection Operators

Slide 4

Slide 4 text

KVC Collection Operators

Slide 5

Slide 5 text

Key-Value Coding

Slide 6

Slide 6 text

Key-Value Coding • ΦϒδΣΫτͷϓϩύςΟʹ
 ؒ઀తʹΞΫηε͢ΔͨΊͷ࢓૊Έ • Key (จࣈྻ)Λ࢖ͬͯϓϩύςΟΛࣝผ͢Δ [status valueForKey:@“text”]; ! => @“Hi, friends!”

Slide 7

Slide 7 text

Key-Value Coding • KeyPath • υοτͰ۠੾ΒΕͨෳ਺ͷΩʔ͔Β
 ͳΔจࣈྻ [status valueForKeyPath: @“user.screen_name”]; ! => @“questbeat”

Slide 8

Slide 8 text

KVC Collection Operators

Slide 9

Slide 9 text

KVC Collection Operators • ίϨΫγϣϯԋࢉࢠ • valueForKeyPath: Ͱ࢖͑Δԋࢉࢠ • @ ͔Β࢝·Δจࣈྻ • @count, @sum, @avg ͳͲ

Slide 10

Slide 10 text

KVC Collection Operators [email protected] ԋࢉͰ࢖༻͢Δ
 ഑ྻ΍ू߹΁ͷ
 KeyPath ԋࢉࢠ ԋࢉͰ࢖༻͢Δ
 (ίϨΫγϣϯ಺ͷ
 ཁૉͷ)ϓϩύςΟ ΁ͷ KeyPath ԋࢉࢠΛ࢖ͬͨ KeyPath ͷॻࣜ

Slide 11

Slide 11 text

KVC Collection Operators ྫ͑͹, Qiita ͷΫϥΠΞϯτΞϓϦͰ User @property NSArray *items; Item @property NSUInteger stockCount;

Slide 12

Slide 12 text

KVC Collection Operators [email protected] ͜ͷͱ͖, user ʹର͢ΔҎԼͷ KeyPath ͸ user.items ͷ ֤ཁૉ͔ΒऔΓग़ͨ͠ stockCount ͷฏۉ Λද͢ (NSNumber)

Slide 13

Slide 13 text

KVC Collection Operators • 3छྨͷԋࢉࢠ • Simple Collection Operators
 (୯७ܕίϨΫγϣϯԋࢉࢠ) • Object Operators
 (ΦϒδΣΫτԋࢉࢠ) • Array and Set Operators
 (഑ྻɾू߹ԋࢉࢠ)

Slide 14

Slide 14 text

Simple Collection Operators

Slide 15

Slide 15 text

@interface Fruit : NSObject ! @property NSString *name; @property double price; @property NSDate *boughtAt; ! @end

Slide 16

Slide 16 text

NSArray *basket = @[ apple, banana, orange, grape ]; price boughtAt Apple 100 2014/04/08 Banana 120 2014/03/18 Orange 200 2014/03/27 Grape 300 2014/04/14

Slide 17

Slide 17 text

Simple Collection Operators @count [basket valueForKeyPath:@“@count”]; ! => @(4) • ίϨΫγϣϯͷཁૉ਺Λฦ͢ (NSNumber) • ԋࢉࢠӈଆͷ KeyPath ͸ແࢹ͞ΕΔ

Slide 18

Slide 18 text

Simple Collection Operators @sum [basket valueForKeyPath:@“@sum.price”]; ! => @(720) • ϓϩύςΟ஋ͷ߹ܭΛฦ͢ (NSNumber) • ஋Λ double ʹม׵͔ͯ͠Β߹ܭ͢Δ

Slide 19

Slide 19 text

Simple Collection Operators @avg [basket valueForKeyPath:@“@avg.price”]; ! => @(180) • ϓϩύςΟ஋ͷฏۉ஋Λฦ͢ (NSNumber) • ஋Λ double ʹม׵͔ͯ͠Βฏۉ͢Δ

Slide 20

Slide 20 text

Simple Collection Operators @max [basket valueForKeyPath:@“@max.price”]; ! => @(300) • ϓϩύςΟͷ஋͕࠷େͷ΋ͷΛฦ͢ • ஋Λ compare: Ͱൺֱ͢Δ

Slide 21

Slide 21 text

Simple Collection Operators @max [basket valueForKeyPath:@“@max.boughtAt”]; ! => 2014-04-13 15:00:00 +0000 • ϓϩύςΟͷ஋͕࠷େͷ΋ͷΛฦ͢ • ஋Λ compare: Ͱൺֱ͢Δ

Slide 22

Slide 22 text

Simple Collection Operators @min [basket valueForKeyPath:@“@min.price”]; ! => @(100) • ϓϩύςΟͷ஋͕࠷খͷ΋ͷΛฦ͢ • ஋Λ compare: Ͱൺֱ͢Δ

Slide 23

Slide 23 text

Simple Collection Operators ͜͜·Ͱͷ·ͱΊ • @count • @sum • @avg • @max • @min

Slide 24

Slide 24 text

Object Operators

Slide 25

Slide 25 text

NSArray *basket = @[ apple, apple, banana, orange, grape ];

Slide 26

Slide 26 text

Object Operators @unionOfObjects [basket valueForKeyPath: @“@unionOfObjects.name”]; ! => @[ @“Apple”, @“Apple”, @“Banana”, @“Orange, @“Grape” ] • ϓϩύςΟͷ஋Λ·ͱΊͯ NSArray Ͱฦ͢ • ॏෳ͕͋ͬͯ΋ͦͷ··

Slide 27

Slide 27 text

Object Operators @distinctUnionOfObjects [basket valueForKeyPath: @“@distinctUnionOfObjects.name”]; ! => @[ @“Apple”, @“Orange” @“Banana, @“Grape” ] • ϓϩύςΟͷ஋Λ·ͱΊͯ NSArray Ͱฦ͢ • ॏෳΛऔΓআ͘

Slide 28

Slide 28 text

• @unionOfObjects • @distinctUnionOfObjects Object Operators ͜͜·Ͱͷ·ͱΊ

Slide 29

Slide 29 text

Array and Set Operators

Slide 30

Slide 30 text

NSArray *hogeStoreInventory = @[ apple, banana ]; ! NSArray *piyoStoreInventory = @[ apple, orange ]; ! NSArray *inventories = @[ hogeStoreInventory, piyoStoreInventory ];

Slide 31

Slide 31 text

Array and Set Operators @unionOfArrays [inventories valueForKeyPath: @“@unionOfArrays.name”]; ! => @[ @“Apple”, @“Banana” @“Apple, @“Orange” ] • ίϨΫγϣϯʹؚ·ΕΔ֤഑ྻͷ
 ϓϩύςΟͷ஋Λ·ͱΊͯ NSArray Ͱฦ͢

Slide 32

Slide 32 text

Array and Set Operators @distinctUnionOfArrays [inventories valueForKeyPath: @“@unionOfArrays.name”]; ! => @[ @“Apple”, @“Orange”, @“Banana” ] • ίϨΫγϣϯʹؚ·ΕΔ֤഑ྻͷ
 ϓϩύςΟͷ஋Λ·ͱΊͯ NSArray Ͱฦ͢ • ॏෳΛऔΓআ͘

Slide 33

Slide 33 text

Array and Set Operators @distinctUnionOfSets • @distinctUnionOfArrays ͱಉ༷͕ͩ
 NSSet ΛؚΉ NSSet ͕ର৅ • ίϨΫγϣϯʹؚ·ΕΔ֤ू߹ͷ
 ϓϩύςΟͷ஋Λ·ͱΊͯ NSSet Ͱฦ͢ • ॏෳΛऔΓআ͘

Slide 34

Slide 34 text

• @unionOfArrays • @distinctUnionOfArrays • @distinctUnionOfSets ͜͜·Ͱͷ·ͱΊ Array and Set Operators

Slide 35

Slide 35 text

• Collection Operators • valueForKeyPath: Ͱ࢖͑Δԋࢉࢠ • 3छྨͷԋࢉࢠ • Simple Collection Operators • Object Operators • Array and Set Operators Summary

Slide 36

Slide 36 text

• ศརͬΆ͍͚Ͳ, ࢖͏ʁ Summary

Slide 37

Slide 37 text

• Cocoa Bindings Ͱ͸େ׆༂ʂ Summary

Slide 38

Slide 38 text

Thanks! • ຊ೔ͷαϯϓϧίʔυ • http://github.com/questbeat/ KVCCollectionOperatorsExample • ࢀߟ • Ωʔ஋ίʔσΟϯάϓϩάϥϛϯάΨΠυ
 https://developer.apple.com/jp/devcenter/ios/ library/documentation/KeyValueCoding.pdf • KVC Collection Operators - NSHipster
 http://nshipster.com/kvc-collection-operators/